特殊字符迷失在MySQL的出口/进口(Special characters get lost in

2019-09-18 10:51发布

我想要一个MySQL 3.23.58数据库移动到运行5.5.19不同的服务器。

旧的一个具有指定latin1编码,而据我可以告诉底层数据确实是诚实的latin1。 我已经尝试了很多东西,主要是:

  • 从与mysqldump和LATIN1编码标志终端出口。
  • 编辑在vim改变 “TYPE = InnoDB的” 到 “ENGINE = InnoDB的” 为MySQL 5兼容性。
  • 进口从终端新的服务器。

浏览旧服务器(在续集的Mac Pro,或MySQL查询在PC浏览器),特殊字符并不总是正确显示,但他们在那里(看着十六进制二进制)。 (在任何情况下,它的工作原理与PHP的Web应用程序。)

浏览新的服务器,所有的特殊字符似乎已被替换为问号。 我知道,有时特殊字符显示为问号(或)如果指定了错误的编码。 但这些似乎是在二进制级别上真正的直线上升ASCII编码的问号。 特殊字符(主要是弯引号和破折号)似乎已经丢失或被破坏,在导出/导入。

任何想法,为什么?

我知道有很多事情可以在故障出错,编码,有许多不同的事情。 我一直在阅读有关这几天(这里和其他地方),并试图将所有正确的字符编码,尝试UTF-8,试图铸造和转换,试图续集Pro的导出/导入(而不是终端)等,但我难倒。

Answer 1:

好,看起来我们已经缩小了你的问题。 我发现这个职位

如果你的文本编辑器VIM,那么最有可能的“<92>”是一个扩展ASCII字符的十六进制代码。 在这种情况下,它是十六进制(92)或月(222)或月(146),它是“正确的单引号”; 不要混淆“单引号”,这是ASCII码十二月39。

一种方法删除所有非ASCII字符从您的文件可能是 -

perl -plne 's/[^[:ascii:]]//g' <your_file>

否则,只需在您的导出的文件与适当的字符查找和替换“<92>”和“<97>”。

[编辑]

我不是一个VIM用户,但这篇文章解决的问题代替<92>智能引号字符

对于每一个您在文件中看到价值,只是做一个字符串替换,就像这样:

:%s/<93>/\'/g

当然,你不能只是键入<93>在那里,所以要得到它在那里你使用

CTRL-V X 93

这将插入十六进制93在适当位置。

在最近导出CSV的从Excel,我见过十六进制91-97。



文章来源: Special characters get lost in MySQL export/import