我有一个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生成的数据库中的所有表名更改为小写:
如何生成将脚本中的所有表重命名为小写形式的SQL脚本:
select concat('rename table ', table_name, ' to ' , lower(table_name) , ';') from information_schema.tables where table_schema = 'your_schema_name';
将phpmyadmin
的数据库重命名为小写名称。
修改Linux服务器上的my.cnf
以使用lower_case_table_names=1
重新启动mysql。
在此之后,我的代码将与小写表名称一起使用。 所以,我能够导入Windows的,并有相同的代码基础工作。
如果我没有记错的话(早些时候有同样的问题 – 但是在我们决定采用哪种解决方案之前,我停止了这个项目的工作) ,还有一个配置选项,说明应该如何使用表名(case-敏感或不区分大小写)。
这是我发现的: 标识符区分大小写
引用该页面:
如果您仅在一个平台上使用MySQL,则通常不必将
lower_case_table_names
变量的默认值更改。 但是,如果要在不同文件系统区分大小写的平台之间传输表,可能会遇到困难。 例如,在Unix上,可以有两个名为my_table
和MY_TABLE
表,但在Windows上,这两个名称被认为是相同的。 为避免由于数据库或表名称的信箱而引起的数据传输问题,您有两种选择:
在所有系统上使用
lower_case_table_names=1
。 这样做的主要缺点是当你使用SHOW TABLES
或SHOW 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