MySQL 中的表名区分大小写吗?

问题描述 投票:0回答:6

MySQL 中的表名区分大小写吗?

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

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

mysql case-sensitive mysql5
6个回答
263
投票

总体来说:

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

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

可以使用系统变量

lower_case_table_names
(在[mysqld]下的my.cnf配置文件中)配置表名称在磁盘上的存储方式。

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


119
投票

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

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

lower_case_table_names=1

这将使您的所有表格变成小写,无论您如何书写。


33
投票

这取决于

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 在查找时将它们转换为小写。 名称比较不区分大小写。

文档


20
投票

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


18
投票
  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

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


0
投票

参考此[文档][1]

Unix 上使用 lower_case_table_names=0,在 Windows 上使用 lower_case_table_names=2。 [1]:https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html

C:\Program Files\MySQL\MySQL Server X.X\my.ini -> 编辑

[mysqld]

之后添加以下行

小写表名= 2

© www.soinside.com 2019 - 2024. All rights reserved.