【问题标题】:Special characters get lost in MySQL export/import特殊字符在 MySQL 导出/导入中丢失
【发布时间】:2012-06-26 11:19:20
【问题描述】:

我正在尝试将 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 的导出/导入(而不是终端)等等。但是我被难住了。

【问题讨论】:

  • 如果您导出为 SQL 语句,您会看到同样的问题吗?从您的问题来看,导出的文件听起来不错(您已经在十六进制编辑器中查看过),但这是造成问题的导入。如果 SQL INSERT 语句是磁盘上的纯文本文件并且所有字符都以 UTF-8 或 latin1 显示,我看不出为什么它会失败。尝试使用您遇到问题的一条记录。
  • 这是一个撇号(或右单引号)在 vim 导出文件中的样子(截图):cl.ly/1C2m0d1M2y0g1J1C3d0P -- 一个 。那是某种vim有向图吗? (Quadgraph?)这里什么都不匹配:vimdoc.sourceforge.net/htmldoc/digraph.html#digraph-table
  • 一个破折号显示为 。
  • MySQL 3.23.58 是否有character_set_client,如果有,当您使用 Sequel Pro 或 MySQL 查询浏览器查看数据时,它设置为什么?客户端程序中设置的编码是什么?当您导入数据时,您正在做mysql --default-character-set=latin1 ...?当您看到 ? 字符时,您要导入的数据库和正在查看的表的字符编码是什么?

标签: mysql utf-8 character-encoding latin1


【解决方案1】:

很好,我们似乎已经缩小了您的问题范围。我找到了this post

如果您的文本编辑器是 vim,那么“”很可能是 扩展 ASCII 字符的十六进制代码。在这种情况下,它是 Hex(92) 或 Oct(222) 或 Dec(146) ,即“右单引号” 标记”;不要与“单引号”混淆,后者是 ASCII 十进制代码 39。

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

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

否则,只需在导出的文件中搜索“”和“”并将其替换为适当的字符。

[编辑]

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

对于您在文件中看到的每个值,只需执行一个字符串 替换,像这样:

:%s/&lt;93&gt;/\’/g

当然,你不能只在里面输入 ,所以要输入 你在那里使用

CTRL-V x 93

将十六进制 93 插入到位。

在最近从 excel 导出的 CSV 中,我看到了十六进制 91-97。

【讨论】:

  • 感谢您的帮助布拉德。不幸的是,删除所有非 ASCII 字符不是一种选择。搜索和替换可以工作,但我还没有弄清楚它如何与 vim 中的扩展 ASCII 字符一起工作。如果我只输入 等,它就找不到它们。
  • 评论Edit:啊,太好了,非常感谢!我还必须将vim中的文件编码设置为utf8才能保存(也许这一直是个问题?我以为我已经处理好了)并确保为mysql设置名称'utf8',但这已修复它的症结所在。看起来不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2017-06-13
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2014-02-10
相关资源
最近更新 更多