数据库
首页 > 数据库> > MySQL导出/导入中会丢失特殊字符

MySQL导出/导入中会丢失特殊字符

作者:互联网

我正在尝试将MySQL 3.23.58数据库移动到运行5.5.19的其他服务器上.

旧的指定了latin1编码,据我所知,基础数据确实是老实说latin1.我尝试了很多东西,主要是:

>使用mysqldump和latin1编码标志从终端导出.
>在vim中编辑以将“TYPE = InnoDB”更改为“ENGINE = InnoDB”以获得MySQL 5的兼容性.
>从终端导入新服务器.

浏览旧服务器(在Sequel Pro for Mac或PC上的MySQL查询浏览器中),特殊字符并不总是正确显示,但它们在那里(以十六进制查看二进制文件). (无论如何,它适用于PHP Web应用程序.)

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

知道为什么吗?

我知道编码有很多可能出错的地方,有很多不同的东西都有问题.我已经阅读了好几天(这里和其他地方),并尝试设置所有正确的字符编码,尝试UTF-8,尝试投射和转换,尝试Sequel Pro的导出/导入(而不是终端)等.但我很难过.

解决方法:

好,看起来我们已经缩小了你的问题.我找到了this post

If your text editor is vim, then most likely the “<92>” is the
hexadecimal code of an extended ASCII character. In this case, it is
Hex(92) or Oct(222) or Dec(146) , which is “right single quotation
mark”; not to confused with “single quote” which is ASCII Dec code 39.

One way to remove all non-ASCII characters from your file could be –

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

否则只需搜索并替换“< 92>”和“< 97>”在导出的文件中具有适当的字符.

[编辑]

我不是VIM用户,但这篇文章解决了replacing the <92> smart quote characters的问题

For each value that you see in your file, just do a string
substitution, like so:

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

of course, you can’t just type that <93> in there, so to get it in
there you use

CTRL-V x 93

which inserts hex 93 in place.

In recently exported CSV’s from excel, I’ve seen hex 91-97.

标签:mysql,utf-8,character-encoding,latin1
来源: https://codeday.me/bug/20190704/1375349.html