200

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

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

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

4

5 回答 5

246

一般来说:

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

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

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

阅读以下部分:10.2.2 标识符大小写敏感性以获取更多信息。

于 2011-05-26T05:25:51.080 回答
113

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

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

lower_case_table_names=1

这将使您的所有表格小写,无论您如何编写它们。

于 2011-05-26T05:51:02.047 回答
25

它取决于lower_case_table_names系统变量:

show variables where Variable_name='lower_case_table_names'

这有三个可能的值:

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

文档

于 2017-06-26T04:24:49.940 回答
20

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

于 2011-05-26T05:21:55.110 回答
17
  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_names现在1

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

于 2018-01-20T10:25:24.943 回答