有大小写敏感的mysqldump问题? WIN->的Linux

当我使用mysqldump转储大写字母的表时,它出现在我的> dump.sql文件中的小写字母。 我在2006年发现了一个报告,差不多4年了http://bugs.mysql.com/bug.php?id=19967

这里的解决schemebuild议让linux不敏感。 如果可能,我宁可不要。 什么是复制一个win32数据库到Linux最简单的方法?

Solutions Collecting From Web of "有大小写敏感的mysqldump问题? WIN->的Linux"

今天我必须做到这一点。 我已经有小写的Windows数据库,并需要导入到具有区分大小写的表名称的Linux数据库,所以与LOWEcase_table_names选项播放不是一个选项:)

它看起来'显示表'显示适当排序的表名称和转储具有字符转义的表名。 我用下面的算法成功地导入了数据库:

  1. 我有mydb.sql与小写Windows转储
  2. 我开始在Linux中创建数据库模式的应用程序,区分大小写的名称。

然后我在转储中使用小写名称,在mysql数据库中使用区分大小写的名称。 我用下面的脚本使用sed&awk转换转储:

#!/bin/bash MYSQL="mysql -u root -p mydb" FILE=mydb.sql TMP1=`mktemp` TMP2=`mktemp` cp $FILE $TMP1 for TABLE in `echo "show tables" | $MYSQL`; do LCTABLE=`echo $TABLE| awk '{print tolower($0)}'` echo "$LCTABLE --> $TABLE" cat $TMP1 | sed "s/\`$LCTABLE\`/\`$TABLE\`/" > $TMP2 cp $TMP2 $TMP1 done cp $TMP1 $FILE.conv rm $TMP1 rm $TMP2 

转储已经正确转换。 在Linux中导入后,一切正常。

根据MySQL手册,你只有有限的选择:

  Use lower_case_table_names=1 on all systems. The main disadvantage 

这是当你使用SHOW TABLES或SHOW DATABASES时,你看不到他们的原始信箱中的名字。

  Use lower_case_table_names=0 on Unix and lower_case_table_names=2 on 

视窗。 这保留了数据库和表名的字母大小写。 这样做的缺点是您必须确保您的语句始终在Windows上使用正确的lettercase引用数据库和表名。 如果你把你的语句转移到Unix中,那么lettercase是有意义的,如果这个casecase是不正确的,他们就不会工作。

  Exception: If you are using InnoDB tables and you are trying to 

避免这些数据传输问题,您应该在所有平台上将lower_case_table_names设置为1以强制名称转换为小写。

请参阅: http : //dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html了解详细信息。