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

ben*_*rre 152 mysql mysql5 case-sensitive

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

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

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

Clo*_*ble 172

一般来说:

数据库和表名在Windows中不区分大小写,在大多数Unix中区分大小写.

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

可以使用系统变量配置表名称如何存储在磁盘上 lower_case_table_names.(在[mysqld]下的my.cnf配置中)

阅读部分:10.2.2标识符区分大小写敏感度以获取更多信息.

  • 这完全烧了我,因为我的代码在我的本地Windows环境中工作得很好,但在Linux上移植到生产时抛出异常!谢谢! (35认同)
  • 这个答案有一点需要注意,文档中没有提到:InnoDB不为数据库和表使用文件或目录名,因此***对象总是*不区分大小写,即使在区分大小写的系统上运行.请参阅此问题,了解可能出现此问题的示例:http://stackoverflow.com/questions/23182969/innodb-complaining-about-foreign-key-name-in-use-when-restoring-database-after -d/23183479#23183479 (6认同)

小智 93

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

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

的lower_case_table_names = 1

无论你如何编写它们,这都会使你的所有表都小写

  • my.ini或my.cnf (5认同)
  • 我在哪里设置这个? (4认同)
  • 这仅影响新表。在更改此设置之前,必须将现有表重命名为小写。 (2认同)

Osw*_*ald 19

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

  • 我不认为InnoDB表总是如此. (3认同)

Ram*_*asi 12

这取决于lower_case_table_names系统变量:

show variables where Variable_name='lower_case_table_names'
Run Code Online (Sandbox Code Playgroud)

这有三个可能的值:

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

文档


sen*_*982 6

  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现在

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

  • 如果您收到错误“服务器('1')和数据字典('0')的小写表名设置不同。”,请重新创建数据库/表。 (3认同)