5

一路走来,在我所做的所有导入和导出之间,我运行的博客上的很多文本都充满了奇怪的重音 A 字符。

当我使用 mysqldump 导出数据并将其加载到文本编辑器中以使用搜索和替换清除坏字符时,搜索只匹配每个“a”字符。

有谁知道我可以直接在 MySQL 中或通过使用 mysqldump 然后重新导入内容来成功追捕这些字符并摆脱它们?

4

3 回答 3

14

这是一个编码问题;这Â是 Unicode 中的不间断空格(HTML 实体 ),以 Latin1 显示。

你可以尝试这样的事情......首先我们检查以确保匹配工作:

SELECT * FROM some_table WHERE some_field LIKE BINARY '%Â%'

some_table这应该返回some_field具有错误字符的任何行。假设它工作正常并且你找到了你正在寻找的行,试试这个:

UPDATE some_table SET some_field = REPLACE( some_field, BINARY 'Â', '' )

这应该删除这些字符(根据您链接的页面,您并不真的想要一个 nbsp,因为您最终会在句子之间连续三个空格等,您应该只有一个)。

如果它不起作用,那么您需要查看正在使用的编码和排序规则。

编辑:刚刚添加BINARY到字符串中;无论编码如何,这都有望使其工作。

于 2012-05-09T19:45:48.533 回答
1

接受的答案对我不起作用。

从这里http://nicj.net/mysql-converting-an-incorrect-latin1-column-to-utf8/ 我发现 Â 字符的二进制代码是 c2a0 (通过将列转换为 VARBINARY 并查看它变成了什么到)。然后在这里http://www.oneminuteinfo.com/2013/11/mysql-replace-non-ascii-characters.html找到了删除(替换)它的实际解决方案:

update entry set english_translation = unhex(replace(hex(english_translation),'C2A0','20')) where entry_id = 4008;

上面的查询将其替换为空格,然后可以应用普通修剪或简单地替换为 ''。

于 2014-12-03T03:25:00.827 回答
0

我遇到过这个问题,很烦人,但可以解决。此外,您可能会发现您的数据中显示了大量字符,如下所示:“这与数据库中的编码更改有关,但只要您的数据库中没有这些字符中的任何一个您想要保留的(例如,如果您实际上使用的是欧元符号),那么您可以按照前面的建议使用一些 MySQL 命令将它们删除。

就我而言,我继承的 Wordpress 数据库遇到了这个问题,我在这里找到了一组有用的适用于 Wordpress 的预先形成的查询http://digwp.com/2011/07/clean-up-weird-数据库中的字符/

还值得注意的是,首先导致问题的原因之一是在文本编辑器中打开数据库,这可能会以某种方式更改编码。因此,如果您可以仅使用 MySQL 而不是文本编辑器来操作数据库,这将降低引发进一步麻烦的风险。

于 2014-04-26T20:17:27.697 回答