在我的Windows开发计算机上,我拥有的代码能够查询看起来都是小写的表。当我在数据中心中部署到测试服务器时,表名似乎以大写字母开头。
我们使用的服务器都在Ubuntu上。
#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 TABLE
或CREATE DATABASE
语句中指定的字母大小写。名称比较区分大小写。 1
-表名以小写形式存储在磁盘上,名称比较不区分大小写。 2
-CREATE TABLE
或CREATE 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
您可能需要重新创建这些表才能使其正常工作。 >
评论
dev.mysql.com/doc/refman/5.6/en/…