我有一个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
不会更正在设置标志之前被破坏的数据库。这些都有小写表名。
我对这两种选择并不狂热。有人知道一种巧妙的方法来解决这个问题吗?
答案 0 :(得分:8)
行。我找到了答案。
在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,并且在两者上都有相同的代码库。
答案 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