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

MySQL中的表名是否区分大小写?,mysql,case-sensitive,mysql5,Mysql,Case Sensitive,Mysql5,MySQL中的表名是否区分大小写 在我的Windows开发机器上,我的代码可以查询所有小写的表。当我部署到数据中心的测试服务器时,表名似乎以大写字母开头 我们使用的服务器都在Ubuntu上。MySQL中的表名是文件系统条目,因此如果底层文件系统是,则它们不区分大小写。通常: 数据库和表名在Windows中不区分大小写,在大多数Unix中也不区分大小写。 在MySQL中,数据库对应于数据中的目录 目录数据库中的每个表至少对应一个 数据库目录中的文件。因此,案件的敏感性 底层操作系统在区分大小写方面

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

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


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

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

通常:

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

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

可以使用系统变量
lower\u case\u table\u names
(在[mysqld]下的my.cnf配置文件中)配置如何在磁盘上存储表名


阅读部分:了解更多信息。

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

要解决此问题,请将小写字母表名称设置为1

小写字母表名称=1


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

这取决于
小写字母\u表\u名称
系统变量:

show variables where Variable_name='lower_case_table_names'
这有三个可能的值:

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

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

  • 通过添加以下行编辑文件:

     [mysqld]
    
     lower_case_table_names=1
    
  • sudo/etc/init.d/mysql重启

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


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

    这让我非常恼火,因为我的代码在本地windows环境下运行得非常好,但在linux上投入生产时会引发异常!!谢谢对此答案有一个警告,文档中没有提到:InnoDB不使用数据库和表的文件或目录名,因此其对象始终不区分大小写,即使在区分大小写的系统上运行也是如此。请看这个问题,以了解由此可能出现的问题:这不是全部。请参阅斯蒂芬伦伯特的答案,因为它是可配置的默认情况下,大多数mac电脑使用不区分大小写的文件系统。不过,您可以选择让您的文件系统区分大小写。这和文件名区分大小写是促使我作为web开发人员转到Ubuntu的原因之一。我不认为InnoDB表总是如此。@SimonEast请您给出一个您认为的原因吗?在MacOS X上它们也不区分大小写,即使底层Unix是。这大概就是为什么Mac上MySQL中的autocomplete对表名或字段名是区分大小写的,即使查询不是。是的,但是有什么可以放这个语句的?我猜它在[mysql]组下面的:/etc/mysql/my.cnf上。但这还不够,还需要做一些其他的事情(当然,除了重新启动mysql…这只会影响新表。在更改此设置之前,必须将现有表重命名为小写。