windows下mysql区分⼤⼩写敏感问题
默认情况下,表别名在Unix上区分⼤⼩写,但在Windows或macOS上不是这样。以下语句在Unix上不起作⽤,因为它引⽤别名as a和as A:
mysql> SELECT col_name FROM tbl_name AS a
-> l_name = 1 l_name = 2;
但是,Windows上允许使⽤相同的语句。为避免此类差异导致的问题,最好采⽤⼀致的约定,例如始终使⽤⼩写名称创建和引⽤数据库和表。建议使⽤此约定,以实现最⼤的便携性和易⽤性。
表和数据库名称如何存储在磁盘上并在 MySQL 中使⽤受 lower_case_table_names 系统变量的影响,您可以在启动 mysqld 时设置该变量。 lower_case_table_names 可以采⽤下表中显⽰的值。这个变量不不影响触发标识符的情况下的灵敏度。在Unix上,默认值为
lower_case_table_names 为 0 ,在 Windows 上,默认值为 1,在 macOS 上,默认值为 2 。
值含义
windows怎么使用mysql0表和数据库名称使⽤CREATE TABLEor CREATE DATABASE语句中指定的lettercase存储在磁盘上。名称⽐较区分⼤⼩写。你应该不会,如果你有不区分⼤⼩写的⽂件名(如Windows或Mac系统)的系统上运⾏MySQL这个变量设置为0。如果使⽤--lower-case-table-names=0 不区分⼤⼩写的⽂件系统强制此变量为0 并MyISAM使⽤不同的字母表访问表名,则可能导致索引损坏。
1表名以⼩写形式存储在磁盘上,名称⽐较不区分⼤⼩写。MySQL在存储和查时将所有表名转换为⼩写。此⾏为也适⽤于数据库名称和表别名。
2表和数据库名称使⽤CREATE TABLEor CREATE DATABASE语句中指定的lettercase存储在磁盘上,但MySQL在查时将它们转换为⼩写。名称⽐较不区分⼤⼩写。这仅适⽤于不区分⼤⼩写的⽂件系统! InnoDB表名和视图名以⼩写形式存储,如下所⽰
lower_case_table_names=1。
如果您只在⼀个平台上使⽤MySQL,则通常不必将lower_case_table_names变量从其默认值更改。但是,如果要在⽂件系统区分⼤⼩写不同的平台之间传输表,则可能会遇到困难。例如,在Unix上,你可以有两个不同的表名为my_table和 MY_TABLE,但在Windows这两个名字都被认为是相同的。为避免数据库或表名字母的数据传输问题,您有两种选择:
lower_case_table_names=1 在所有系统上使⽤。这样做的主要缺点是,当您使⽤ SHOW TABLES 或时 SHOW DATABASES,您看不到原始字母中的名称。
使⽤ lower_case_table_names=0 在 Unix 和 lower_case_table_names=2Windows 上。这样可以保留数据库和表名的字母⼤⼩写。这样做的缺点是您必须确保您的语句始终在 Windows 上使⽤正确的字母⼤⼩引⽤您的数据库和表名。如果将语句转移到 Unix,那么 lettercase 很重要,如果 lettercase 不正确,它们就不起作⽤。
例外:如果您正在使⽤ InnoDB 表并且您试图避免这些数据传输问题,则应 lower_case_table_names 在所有平台上将其设置为 1 以强制将名称转换为⼩写。
如果您计划lower_case_table_names在Unix上将系统变量设置为1,则必须先将旧数据库和表名转换为⼩写,然后再停⽌ mysqld并使⽤新变量设置重新启动它。要对单个表执⾏此操作,请使⽤ RENAME TABLE:
翻译⾃ mysql 官⽹,原⽂链接:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。