mysqldump问题具有区分大小写?赢 - > linux的

时间:2010-06-07 18:28:19

标签: mysql windows linux mysqldump

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

solution here建议使linux不敏感。如果可能,我宁愿不要。什么是将win32 db复制到linux的最简单方法?

2 个答案:

答案 0 :(得分:6)

根据MySQL手册,您只有少数选项:

  
      
  • 在所有系统上使用lower_case_table_names = 1。主要缺点   这是当你使用SHOW时   TABLES或SHOW DATABASES,你没有   看到他们原来的名字   大小写。

  •   
  • 在Unix上使用lower_case_table_names = 0,在lower_case_table_names = 2上使用   视窗。这保留了字母   数据库和表名称。该   这样做的缺点是你必须这样做   始终确保您的陈述   请参阅您的数据库和表名称   用正确的字母包装   视窗。如果你转移你的   声明到Unix,其中是lettercase   很重要,如果,它们不起作用   字母不正确。

         

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

  •   

有关详细信息,请参阅:http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

答案 1 :(得分:2)

今天我必须这样做。我已经有小写的Windows数据库,并且需要使用区分大小写的表名导入到linux数据库,所以使用lowecase_table_names选项的游戏不是一个选项:)

看起来'show tables'显示了适当排序的表名,并且转储已使用`字符转义了表名。我已成功使用以下算法导入数据库:

  1. 我有mydb.sql和小写的Windows转储
  2. 我启动了在Linux中创建数据库模式的应用程序,区分大小写。
  3. 然后我在转储中有小写名称,在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中导入后,一切正常。