一尘不染

MySQL区分大小写的表转换

linux

我有一个PHP代码库,用于混合环境下处理我们的MySQL表。例如,xar_intakeformgenerator_ChangeLog

我们的代码也可以在Windows上运行,并且在不了解之前,我们已经将多个数据库导入到Windows服务器上。这导致Windows
MySQL将所有表名更改为小写。(xar_intakeformgenerator_changelog)。现在,我们知道如何防止这种情况发生在新数据库中。(Set lower_case_table_names)并且,代码在Windows服务器上运行良好,因为MySQL根本不在乎Windows上表的大小写。

这是问题所在。Windows服务器使我们感到悲伤,我们需要将所有数据库移至Linux服务器。由于所有表名都转换为小写,因此该代码在Linux上将不起作用。幸运的是,Xaraya创建了表映射。因此,从理论上讲,我可以为这些数据库建立新的代码库,并更改每个模块的映射以使用小写表。或者,我们可以在将表名称导入Linux机器后手动更改表名称,以使表大小写正确。

更改lower_case_table_names不会纠正设置该标志之前已损坏的数据库。这些都有小写的表名。

我对这两种选择都不陌生。有谁知道处理这个问题的巧妙方法?


阅读 286

收藏
2020-06-07

共1个答案

一尘不染

好。我找到了答案。

在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. 修改了my.cnf在Linux服务器上使用lower_case_table_names=1

  4. 重新启动mysql。

之后,我的代码将使用小写的表名。因此,我能够导入Windows,并在两者上具有相同的代码库工作。

2020-06-07