【问题标题】:mysqldump problem with case sensitivity? Win->linuxmysqldump 区分大小写的问题?赢->linux
【发布时间】:2011-02-28 20:13:31
【问题描述】:

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

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

【问题讨论】:

    标签: mysql windows linux mysqldump


    【解决方案1】:

    根据 MySQL 手册,您只有有限数量的选项:

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

    • 在 Unix 上使用 lower_case_table_names=0,在 Unix 上使用 lower_case_table_names=2 视窗。这保留了字母大小写 数据库和表名。这 这样做的缺点是你必须 确保您的陈述始终 参考您的数据库和表名 正确的字母大小写 视窗。如果您转移您的 对 Unix 的语句,其中字母大小写 很重要,如果 字母大小写不正确。

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

    详情请参阅:http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

    【讨论】:

    • 所有这些选项都要求用户在创建数据之前及时返回并配置他们的数据库 lower_case_table_names 选项。
    【解决方案2】:

    今天我不得不这样做。我已经有小写的windows db,需要用区分大小写的表名导入linux db,所以玩lowecase_table_names选项不是一个选项:)

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

    1. 我有带有小写 windows 转储的 mydb.sql
    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 中导入后一切正常。

    【讨论】:

    • 像魔术一样工作。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多