Windows 中的 MySQL 小写表名 Unix 上的大写名称

Posted

技术标签:

【中文标题】Windows 中的 MySQL 小写表名 Unix 上的大写名称【英文标题】:MySQL Lowercase Table Names in Windows Uppercase names on Unix 【发布时间】:2010-11-13 10:19:16 【问题描述】:

我有一个问题,我的生产服务器运行 Unix,而我的开发服务器运行 MS Windows。 问题是 Windows 不区分大小写,而 Unix 是。所以我在生产服务器上设置的表使用大写的表名,即“客户”,而在 Windows 上,表名是小写的“客户”。

这一切都很好,直到您需要从一个盒子获取数据到另一个盒子,并且您的 SQL 导出以小写字母表示插入到“客户”中,然后是“未知表客户”。因为生产服务器当前采用共享托管计划,所以我无法更改设置并安装忽略大小写的密钥。

所以我的问题是,有没有办法让 Windows 将表转换回正确的大小写,或者我可以在导出 SQL 文件中包含一些设置,以便我可以上传数据而不会出现这个问题。

谢谢

更新

这是我为遇到此问题的其他人发现的。

如果您已经设置了在 Windows 上运行 mysql 的表,请添加 lower_case_table_names=2 到 my.cnf 或 my.ini 文件不会自动更改表的大小写,即使它们最初是使用大写或混合大小写名称创建的。

CREATE TABLE“MyTable”将创建一个新表“mytable”“MyTable”即使在您的 my.cnf 文件中设置了 lower_case_table_names=2。

要解决此问题,请使用此方法

    复制原始表格 放下你原来的桌子 使用正确的大小写重命名您的副本表。

这是唯一可行的方法。希望这可以帮助某人。

【问题讨论】:

您是否可以选择将 MySql 的开发版本更改为区分大小写? 因为它在 Windows 上运行,不。本文档解释了问题,但没有解决我的问题。我通常要做的只是在 SQL 文件中进行批量查找和替换以更改表名大小写。 dev.mysql.com/doc/refman/5.0/en/… 【参考方案1】:

取自dev.mysql.com:

为避免因数据库或表名字母大小写引起的数据传输问题,您有两种选择:

在所有系统上使用 lower_case_table_names=1。这样做的主要缺点是,当您使用 SHOW TABLES 或 SHOW DATABASES 时,您看不到原始字母大小写的名称。 在 Unix 上使用 lower_case_table_names=0,在 Windows 上使用 lower_case_table_names=2。这将保留数据库和表名的字母大小写。这样做的缺点是您必须确保您的语句在 Windows 上始终以正确的字母大小写引用您的数据库和表名。如果您将语句转移到字母大小写很重要的 Unix,如果字母大小写不正确,它们将不起作用。

例外:如果您使用 InnoDB 表并试图避免这些数据传输问题,则应在所有平台上将 lower_case_table_names 设置为 1 以强制将名称转换为小写。

如果您打算在 Unix 上将 lower_case_table_names 系统变量设置为 1,则必须先将旧的数据库和表名转换为小写,然后再停止 mysqld 并使用新的变量设置重新启动它。

【讨论】:

我认为您实际上不必更改 Unix 机器上的任何内容即可使用第二组建议,因为 lower_case_table_names 默认为 0。 哦,还有+1;我不确定我的回答不会修复它,但我很确定这个 ...我并不是故意从 dev.mysql 发布内容来冒犯...我自己并不知道这个 mysql 选项,而且我几乎完全是一名数据库开发人员。跨度> 我认为你有正确的 codemonkey。 lower_case_table_names=2 可以做到。但我想知道导出表名是否仍为小写?我将不得不对其进行测试并让你们知道。 我错过的原因是小字。在选项 0 中,他们说“不区分大小写的文件系统”,在选项 2 中,他们说“在不区分大小写的文件系统上!”我错过了“不”部分 DOH!【参考方案2】:

有一个简单的解决方案:

始终将您的表名命名为小写。

【讨论】:

【参考方案3】:

Windows 关于大小写的通用指导理念是“不区分大小写,大小写存储”。这意味着 Windows 永远不会放弃您的大小写,所以您在 Windows 上的表小写的原因有点神秘。

抱歉,如果这是一个愚蠢的问题,但您是否尝试过重命名 Windows 机器上的表,以便它们具有正确的大小写模式?

【讨论】:

是的,我有,但根据这个文档dev.mysql.com/doc/refman/5.0/en/… 它不会工作。 我在该文档中没有看到任何暗示这一点的内容。你这样解释什么?

以上是关于Windows 中的 MySQL 小写表名 Unix 上的大写名称的主要内容,如果未能解决你的问题,请参考以下文章

MySQL + Windows 和小写表名

MySqllinux下,设置mysql表名忽略大小写

windows下安装Mysql8,表名无法设置成大小写敏感的解决

2018.06.18 Ubuntu中mysql表名大小写区分

windows下mysql数据库表名大小写不敏感

mysql linux下表名忽略大小写注意事项