【问题标题】:Strange behaviour with MySql case sensitive table name in windowsWindows中MySql区分大小写的表名的奇怪行为
【发布时间】:2014-12-14 22:45:27
【问题描述】:

在我的 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)

【问题讨论】:

    标签: mysql case-sensitive


    【解决方案1】:

    有一个名为lower_case_table_names 的MySql 变量。当设置为0 时,表名区分大小写。但在 Windows 等不区分大小写的机器上不建议这样做。下一个选项是1。在此选项中,所有表名在存储之前都被转换为小写。在这种情况下,您总是会得到小写的表名。在我的例子中,这个变量的值设置为2。在这种情况下,MySql 是这样存储表名的,但是当我们比较表名时,它会将它们转换为小写并进行比较。

    所以在第一种情况下不比较表名,因此我们得到原始值。

    第二种情况是比较表名,所以mysql将表名转换为小写进行比较。但奇怪的是,他们返回的是转换后的值,而不是原始值。

    最后在第三种情况下,我们使用like 运算符,它本身不区分大小写,因此 mysql 不会费心将表名转换为小写,我们会得到原始结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 2019-03-17
      • 2011-09-02
      • 2012-10-05
      • 2011-01-01
      相关资源
      最近更新 更多