MySQL大小写敏感表转换

我有一个PHP代码库,写在混合的情况下,以解决我们的MySQL表。 例如, xar_intakeformgenerator_ChangeLog

我们的代码也运行在Windows上,在我们知道任何更好的之前,我们将多个数据库导入Windows服务器。 这导致Windows MySQL将所有表名称更改为小写。 ( xar_intakeformgenerator_changelog )。 我们现在知道如何防止发生新的数据库。 ( Set lower_case_table_names )而且,代码在Windows服务器上运行良好,因为MySQL只是不关心Windows上表的情况。

这是问题。 Windows服务器给我们带来了麻烦,我们需要把所有的数据库都移到Linux服务器上。 由于所有的表名已经转换为小写,所以代码在Linux上将不起作用。 幸运的是,Xaraya创build表映射。 所以,从理论上讲,我可以为这些数据库build立一个新的代码库,并改变每个模块的映射以使用小写表。 或者,我们可以在我们将它们导入Linux机器后手动更改表名,以使表格大小合适。

更改lower_case_table_names不会更正在标志设置之前被破坏的数据库。 这些都有小写的表名。

我对任何一个选项都不感冒。 有谁知道一个巧妙的方式来处理这个?

好。 我找到了我的答案。

在Linux服务器上,我需要运行以下命令将Linux生成的数据库中的所有表名更改为小写:

  1. 如何生成将脚本中的所有表重命名为小写形式的SQL脚本:

     select concat('rename table ', table_name, ' to ' , lower(table_name) , ';') from information_schema.tables where table_schema = 'your_schema_name'; 
  2. phpmyadmin的数据库重命名为小写名称。

  3. 修改Linux服务器上的my.cnf以使用lower_case_table_names=1

  4. 重新启动mysql。

在此之后,我的代码将与小写表名称一起使用。 所以,我能够导入Windows的,并有相同的代码基础工作。

如果我没有记错的话(早些时候有同样的问题 – 但是在我们决定采用哪种解决方案之前,我停止了这个项目的工作) ,还有一个配置选项,说明应该如何使用表名(case-敏感或不区分大小写)。

这是我发现的: 标识符区分大小写

引用该页面:

如果您仅在一个平台上使用MySQL,则通常不必将lower_case_table_names变量的默认值更改。 但是,如果要在不同文件系统区分大小写的平台之间传输表,可能会遇到困难。 例如,在Unix上,可以有两个名为my_tableMY_TABLE表,但在Windows上,这两个名称被认为是相同的。 为避免由于数据库或表名称的信箱而引起的数据传输问题,您有两种选择:

  • 在所有系统上使用lower_case_table_names=1 。 这样做的主要缺点是当你使用SHOW TABLESSHOW DATABASES ,你看不到原来的lettercase中的名字。

    • 在Unix上使用lower_case_table_names=0 ,在Windows上使用lower_case_table_names=0 lower_case_table_names=2 。 这保留了数据库和表名的字母大小写。

(还有更多我没有复制粘贴;所以要阅读该页面可能是一个好主意;-))

希望这将有助于…

的lower_case_table_names

对于Windows,它默认为“使所有小写”(1)。 将其设置为2:“不区分大小写,但保持原样”。

这些更改进入您的my.cnf