MySQL区分大小写表转换

时间:2009-08-11 18:52:26

标签: php mysql windows 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不会更正在设置标志之前被破坏的数据库。这些都有小写表名。

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

3 个答案:

答案 0 :(得分: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';
    
  2. phpmyadmin中的数据库重命名为小写名称。

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

  4. 重启mysql。

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

答案 1 :(得分:1)

如果我没记错的话(前段时间遇到了同样的问题 - 但在我们决定采用哪种解决方案之前我就停止了该项目......),有一个配置选项其中说明了如何使用表名(区分大小写或不区分大小写)。

以下是我发现的内容:Identifier Case Sensitivity

引用该页面:

  

如果您只在一个上使用MySQL   平台,你通常不必   更改lower_case_table_names   变量的默认值。   但是,你可能会遇到   如果你想转移困难   不同平台之间的表格   在文件系统中区分大小写。对于   例如,在Unix上,你可以有两个   名为my_table和的不同表   MY_TABLE,但在Windows上这两个   名称被认为是相同的。至   避免出现数据传输问题   来自数据库或表的字母   名称,您有两种选择:

     
      
  • 在所有系统上使用lower_case_table_names=1。主要缺点是   这是当你使用SHOW TABLES时   或SHOW DATABASES,你没有看到   名字原始的字母。

         
        
    • 在Unix上使用lower_case_table_names=0,在lower_case_table_names=2上使用   视窗。这保留了字母   数据库和表名。
    •   
  •   

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

希望这会有所帮助......

答案 2 :(得分:0)

的lower_case_table_names

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

这些更改会进入您的my.cnf