MySQL中的表名是否区分大小写?


Answers:


203

一般来说:

数据库和表名在Windows中不区分大小写,在大多数Unix版本中都不区分大小写。

在MySQL中,数据库与data目录中的目录相对应。数据库中的每个表对应于数据库目录中的至少一个文件。因此,基础操作系统的区分大小写在数据库和表名的区分大小写中发挥了作用。

可以使用系统变量lower_case_table_names(在[mysqld]下的my.cnf配置文件中)配置表名在磁盘上的存储方式。

阅读本节:10.2.2标识符区分大小写以获取更多信息。


40
由于我的代码在本地Windows环境下工作得很好,所以这完全使我不寒而栗,但是在Linux上投入生产时会引发异常!谢谢!
portforwardpodcast

6
这个答案有一个警告,在文档中没有提到:InnoDB不为数据库和表使用文件名或目录名,因此,即使在区分大小写的系统上运行,对象也始终不区分大小写。看到这个问题要问的一个例子是什么可以去,因为这个错误:stackoverflow.com/questions/23182969/...
朱尔斯

这还不是全部。请参阅StephenLembert的答案,因为它是可配置的
Chris Wood,

1
默认情况下,大多数Mac计算机使用不区分大小写的文件系统。不过,您可以选择使文件系统区分大小写。
乍得2016年

这和文件名区分大小写是导致我转为使用Web开发人员的Ubuntu的原因之一。
穆罕默德·本·尤斯拉特

99

数据库和表名在Windows中不区分大小写,在大多数Unix或Linux版本中都不区分大小写。

要解决此问题,请将lower_case_table_names设置为1

lower_case_table_names = 1

无论您如何编写,这都会使您的所有表变成小写


1
即使在底层Unix上,它们在MacOS X上也不区分大小写。这大概就是为什么在Mac上,MySQL中的自动完成功能对表或字段名区分大小写的原因,即使查询不是这样。
David

是的,但是要发表这个声明吗?我猜是在[mysql]组下面的/etc/mysql/my.cnf。但这还不够,还需要做其他事情(当然
还要

1
这只会影响新表。更改此设置之前,必须将现有表重命名为小写。
马丁

19

MySQL中的表名是文件系统条目,因此如果基础文件系统是不区分大小写的。


3
我认为InnoDB表并非总是如此。
西蒙·伊斯特

@SimonEast您能否请您提供一个您认为的理由?
艾莉亚

16

它取决于lower_case_table_names系统变量:

show variables where Variable_name='lower_case_table_names'

有三个可能的值:

  • 0- CREATE TABLECREATE DATABASE语句中指定的字母大写。名称比较区分大小写。
  • 1 -表名以小写形式存储在磁盘上,名称比较不区分大小写。
  • 2-在CREATE TABLEor CREATE DATABASE语句中指定的字母大写,但MySQL在查询时将其转换为小写。名称比较不区分大小写。

文献资料


11
  1. 在以下位置找到文件 /etc/mysql/my.cnf

  2. 通过添加以下行来编辑文件:

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. 运行mysqladmin -u root -p variables | grep table检查lower_case_table_names1现在

您可能需要重新创建这些表才能使其正常工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.