【问题标题】:MySQL UTF8 import behaves different across platformsMySQL UTF8 导入在不同平台上的行为不同
【发布时间】:2014-10-04 09:42:40
【问题描述】:

我需要将在 Windows 平台上创建的提取文件导入在 Centos 服务器上创建和运行的 MySQL 5.5 数据库中。我在运行 MySQL 5.5 数据库服务器的 OSX 10.9 笔记本电脑上开发脚本。这些文件包含荷兰语文本,因此它们可以在人名中包含重音字母。

我需要一种可靠的方法来确认导入在所有平台上都是正确的。

第一次尝试:

  • 创建的 bash shell 脚本 (loadFiles.sh) 删除数据库,使用提供的模式转储重新创建数据库并使用 LOAD DATA LOCAL INFILE 加载文件
  • db 架构是在 OSX 上使用 latin1 编码创建的
  • 文件按规定导入
  • 重音名称在 OSX 上的 Sequel Pro 中看起来不错
  • 在 Centos 服务器上运行 loadFiles.sh 脚本 -> 名称是乱码
  • 转储 OSX 版本的数据库并在 Centos 服务器上导入 -> 名称很好

第二次尝试:

  • db 架构更改为 utf8
  • loadFiles.sh 扩展为使用以下方法测试和转换文件:

`

file $FILE | grep ISO-8859 >> /dev/null
NEEDCONVERSION=$(echo $1)

if [ "$NEEDCONVERSION == "0"]; then
  iconv -f LATIN1 -t UTF8 $FILE > $CONVERTEDFILE    
fi
  • 已导入转换后的文件
  • 在 Centos 服务器上运行脚本 -> 所有名称看起来都不错
  • 在 Centos 中使用 less 在命令行检查文件 -> 名称看起来不错
  • 在 OSX 上运行脚本 -> 名称是乱码
  • 在 OSX 中使用 less 在命令行上检查文件 -> 名称看起来不错

我试过了:

  • iconv的不同编码(UTF8-MAC vs UTF8)->唯一的区别是名称的乱码方式不同
  • 我按照this question 中的建议(将--default-character-set=utf8 添加到MySQL 导入语句并确保字符排序正确),但这并没有解决我的问题。

更新:当我更改 Sequel Pro 在 OSX 上查看数据的方式时(基本上是下面的命令),名称看起来又好了。在使用 Sequel Pro 查看 Centos 服务器上的数据时,我不需要这样做。

set character_set_result=latin1;set character_set_client=latin1;

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql macos utf-8 centos iconv


    【解决方案1】:

    由于我可以使用所描述的解决方法完成工作,因此我没有进一步调查。但事实证明,数据库的默认设置是“latin1”。这可能是线索。

    即:character_set_database 设置为 latin1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2010-11-17
      • 2012-06-12
      • 2023-03-27
      • 2018-09-14
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多