首页 文章

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

提问于
浏览
24

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

所有这一切都很好,直到你需要从一个盒子到另一个盒子获取数据,并且你的SQL导出说是以小写形式插入“customers”,并且presto“Unkown table customers” . 由于 生产环境 服务器当前处于共享主机方案中,因此我无法更改设置并安装忽略大小写的密钥 .

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

谢谢

UPDATE

以下是我发现的其他人遇到此问题 .

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

CREATE TABLE "MyTable"将创建一个新表"mytable" not "MyTable",即使my.cnf文件中设置了lower_case_table_names = 2也是如此 .

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

  • 制作原始表格的副本

  • 放下原始表格

  • Rename 您的副本表使用正确的大小写 .

这是唯一可行的方法 . 希望这有助于某人 .

3 回答

  • 0

    取自dev.mysql.com

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

    • 在所有系统上使用lower_case_table_names = 1 . 这样做的主要缺点是,当您使用SHOW TABLES或SHOW DATABASES时,您看不到原始lettercase中的名称 .

    • 在Unix上使用lower_case_table_names = 0,在Windows上使用lower_case_table_names = 2 . 这样可以保留数据库和表名的字母大小写 . 这样做的缺点是您必须确保您的语句始终在Windows上使用正确的字母大小引用您的数据库和表名 . 如果将语句转移到Unix,那么lettercase很重要,如果lettercase不正确,它们就不起作用 .

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

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

  • -1

    有一个简单的解决方案:

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

  • 21

    关于案例,Windows的通用指导思想是“不区分大小写, case stored ” . 这意味着Windows永远不打算丢弃你的情况,所以你的Windows上的表是小写的有点神秘 .

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

相关问题