MySQL UTF8导入在不同平台上表现不同

时间:2014-10-04 09:42:40

标签: mysql macos utf-8 centos iconv

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

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

首次尝试:

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

第二次尝试:

  • db schema更改为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与UTF8) - >唯一的区别是名称乱码的方式不同
  • 我按照this question中的建议(将--default-character-set=utf8添加到MySQL导入语句并确保字符排序正确),但它没有解决我的问题。

更新:当我更改Sequel Pro查看OSX上的数据的方式时(基本上它会显示下面的命令),名称再次显示正常。使用Sequel Pro在Centos服务器上查看数据时,我不需要这样做。

set character_set_result=latin1;set character_set_client=latin1;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

即:character_set_database设置为latin1