我试图将MySQL 3.23.58数据库移动到运行5.5.19的其他服务器上。
旧的指定了latin1编码,据我所知,底层数据确实是老实说latin1。我尝试了很多东西,主要是:
浏览旧服务器(在Sequel Pro for Mac或在PC上使用MySQL查询浏览器),特殊字符不会总是正确显示,但它们会在那里(以十六进制查看二进制文件)。 (无论如何,它适用于PHP Web应用程序。)
浏览新服务器时,所有特殊字符似乎都被问号所取代。我知道如果指定了错误的编码,有时特殊字符可以显示为问号(或�)。但这些似乎是二进制级别的真正的直接编码ASCII问号。在导出/导入中,特殊字符(主要是卷曲引号和破折号)似乎已丢失或被破坏。
知道为什么吗?
我知道编码有很多可能出错的地方,有很多不同的东西都有问题。我已经阅读了好几天(在这里和其他地方),尝试设置所有正确的字符编码,尝试UTF-8,尝试投射和转换,尝试了Sequel Pro的导出/导入(而不是终端)等等。但我很难过。
答案 0 :(得分:2)
好,看起来我们已经缩小了你的问题。我找到了this post
如果您的文本编辑器是vim,则很可能是“< 92>”是个 扩展ASCII字符的十六进制代码。在这种情况下,它是 十六进制(92)或十月(222)或十二进制(146),这是“右单引号” 标记“;不要与”单引号“混淆,后者是ASCII Dec代码39。
从文件中删除所有非ASCII字符的一种方法可能是 -
perl -plne 's/[^[:ascii:]]//g' <your_file>
否则只需搜索并替换“&lt; 92&gt;”和“&lt; 97&gt;”在导出的文件中使用适当的字符。
<强> [编辑] 强>
我不是VIM用户,但这篇文章解决了replacing the <92> smart quote characters
的问题对于您在文件中看到的每个值,只需执行一个字符串 替换,像这样:
:%s/<93>/\’/g
当然,你不能只输入&lt; 93&gt;在那里,所以要进去 你在那里使用
CTRL-V x 93
将hex 93插入到位。
在最近从excel导出的CSV中,我看到了hex 91-97。