在我的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)
1 回答
有一个名为
lower_case_table_names
的MySql变量 . 当此项设置为0
时,表名称区分大小写 . 但是不建议像Windows一样不区分大小写的机器 . 下一个选项是1
. 在此选项中,所有表名称甚至在存储之前都会转换为小写 . 在这种情况下,您将始终获得小写表名称 . 在我的例子中,此变量的值设置为2
. 在这种情况下,MySql会存储表名,但是当我们比较表名时,它会将它们转换为小写并进行比较 .所以在第一种情况下,表名不进行比较,因此我们得到原始值 .
在第二种情况下,我们比较表名,所以mysql将表名转换为小写进行比较 . 但奇怪的是,他们正在返回转换后的值,而不是原始值 .
最后在第三种情况下,我们使用
like
运算符,它本身不区分大小写,因此mysql不打算将表名转换为小写,我们得到原始结果 .