在我的windows机器中,当我使用以下查询从mysql中选择表名时,我得到的表名是区分大小写的。

mysql> select table_schema, table_name
from information_schema.tables where table_schema='test';
+--------------+------------+
| table_schema | table_name |
+--------------+------------+
| test         | TableOne   |
| test         | TableTwo   |
+--------------+------------+
2 rows in set (0.00 sec)

但当我按表名选择时,得到的结果不同。
mysql> select table_schema, table_name from information_schema.tables
where table_schema='test' and table_name = 'TableOne';
+--------------+------------+
| table_schema | table_name |
+--------------+------------+
| test         | tableone   |
+--------------+------------+
1 row in set (0.00 sec)

更奇怪的是这个。
mysql> select table_schema, table_name from information_schema.tables
where table_schema='test' and table_name like 'TableOne';
+--------------+------------+
| table_schema | table_name |
+--------------+------------+
| test         | TableOne   |
+--------------+------------+
1 row in set (0.00 sec)

最佳答案

有一个名为lower_case_table_names的mysql变量。当设置为0时,表名区分大小写。但在像windows这样的不区分大小写的机器上不建议这样做。下一个选项是1。在这个选项中,所有表名甚至在存储之前都转换为小写。在这种情况下,您总是会得到小写的表名。在我的例子中,这个变量的值被设置为2。在本例中,mysql以同样的方式存储表名,但是当我们比较表名时,它会将它们转换为小写并进行比较。
所以在第一种情况下,表名是不比较的,因此我们得到原始值。
在第二种情况下,我们比较表名,所以mysql将表名转换为小写进行比较。但奇怪的是,它们返回的是转换后的值,而不是原始值。
最后,在第三种情况下,我们使用了like运算符,它本身不区分大小写,因此mysql不必费心将表名转换为小写,我们得到了原始结果。

关于mysql - Windows中MySql区分大小写的表名称的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26457396/

10-13 06:08