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

时间:2009-07-23 14:59:48

标签: mysql

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

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

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

谢谢

更新

以下是我为其他人发现的问题。

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

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

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

  1. 制作原始表格的副本
  2. 放弃原始表格
  3. 使用正确的案例重命名您的副本表。
  4. 这是唯一有效的方法。希望这有助于某人。

3 个答案:

答案 0 :(得分:21)

取自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,那么lettercase很重要,如果lettercase不正确,它们就不起作用。

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

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

答案 1 :(得分:0)

有一个简单的解决方案:

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

答案 2 :(得分:-1)

Windows的普遍指导原则是“不区分大小写,案例存储”。这意味着Windows从不打算丢弃您的案例,因此Windows 上的表格小写的原因有点神秘。

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