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

在我的Windows开发计算机上,我拥有的代码能够查询看起来都是小写的表。当我在数据中心中部署到测试服务器时,表名似乎以大写字母开头。

我们使用的服务器都在Ubuntu上。

评论

dev.mysql.com/doc/refman/5.6/en/…

#1 楼

通常,

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


在MySQL中,数据库对应于目录在data
目录中。数据库中的每个表对应于数据库目录中的至少一个
文件。因此,
底层操作系统的区分大小写在
数据库和表名的区分大小写中起作用。


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

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

评论


因为我的代码在我的本地Windows环境下工作得很好,所以这完全让我非常恼火,但是在Linux上投入生产时会引发异常!谢谢!

–portforwardpodcast
13年2月14日在21:10

这个答案有一个警告,在文档中没有提到:InnoDB不为数据库和表使用文件名或目录名,因此,即使在区分大小写的系统上运行,其对象也始终不区分大小写。有关此问题可能出问题的示例,请参见此问题:stackoverflow.com/questions/23182969/…

–法律
2014年4月20日14:29在

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

–克里斯·伍德
16 Jun 8'在12:45



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

–乍得
16-9-29在16:13

这和文件名区分大小写是导致我成为Web开发人员的原因之一。

–穆罕默德·本·尤斯拉特(Muhammad bin Yusrat)
17/12/14在8:17

#2 楼

数据库和表名在Windows中不区分大小写,在大多数Unix或Linux中也不区分大小写。
要解决此问题,请将lower_case_table_names设置为1

lower_case_table_names = 1

这将使所有表都变为小写,无论您如何编写。

评论


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

–大卫
16 Jan 14 '14:19



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

– Alg_D
16-2-5在12:22

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

–马丁
17年4月12日在10:08

#3 楼

它取决于lower_case_table_names系统变量:

show variables where Variable_name='lower_case_table_names'


有三个可能的值:



0- CREATE TABLECREATE DATABASE语句中指定的字母大小写。名称比较区分大小写。

1-表名以小写形式存储在磁盘上,名称比较不区分大小写。

2-CREATE TABLECREATE DATABASE语句中指定的字母大小写,但MySQL在查找时将它们转换为小写。
名称比较不区分大小写。 />

#4 楼

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

评论


我认为InnoDB表并非总是如此。

–西蒙东
15年11月12日在12:47

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

– Arya
19年8月17日在16:16

#5 楼



将文件定位在/etc/mysql/my.cnf


通过添加以下行来编辑文件:
 [mysqld]

 lower_case_table_names=1



sudo /etc/init.d/mysql restart


运行mysqladmin -u root -p variables | grep table来检查lower_case_table_names现在是1


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