gpt4 book ai didi

mysql - 特殊字符在 MySQL 导出/导入中丢失

转载 作者:可可西里 更新时间:2023-11-01 07:37:44 27 4
gpt4 key购买 nike

我正在尝试将 MySQL 3.23.58 数据库移动到另一台运行 5.5.19 的服务器。

旧版本指定了 latin1 编码,据我所知,底层数据确实是 latin1。我尝试了很多东西,主要是:

  • 使用 mysqldump 和 latin1 编码标志从终端导出。
  • 在 vim 中进行编辑以将“TYPE=InnoDB”更改为“ENGINE=InnoDB”以兼容 MySQL 5。
  • 从终端导入到新服务器。

浏览旧服务器(在 Mac 上的 Sequel Pro 或 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 - 特殊字符在 MySQL 导出/导入中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11185324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com