MySQL区分大小写表转换

Amy*_*ski 2 php mysql linux windows

我有一个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不会更正在设置标志之前损坏的数据库.这些都具有小写表名.

我对这两种选择并不狂热.有人知道一种巧妙的方法来处理这个问题吗?

Amy*_*ski 8

好.我找到了答案.

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

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

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

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

  4. 重启mysql.

在此之后,我的代码将使用小写表名.所以,我能够导入Windows,并在两者上都有相同的代码库.