【发布时间】: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