从MySQL数据中删除奇怪的字符

时间:2012-05-09 19:36:42

标签: mysql

在此过程中的某个地方,在我所做的所有导入和导出之间,我运行的博客上的很多文本都充满了怪异的重音A字符。例如:

http://teamsoell.com/andy/petnames(我知道的内容)

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

有没有人知道我能成功追捕这些角色并摆脱它们,无论是直接在MySQL中还是使用mysqldump然后重新导入内容?

3 个答案:

答案 0 :(得分:10)

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

您可以尝试这样的事情......首先我们检查以确保匹配正常:

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

这应返回some_tablesome_field有不良字符的所有行。假设它正常工作并且您找到了您正在寻找的行,请尝试以下方法:

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

那应该删除那些字符(基于你链接的页面,你真的不想要那里,因为你最终会在句子之间连续三个空格等等,你应该只有一个)。

如果它不起作用,那么你需要查看正在使用的编码和校对。

编辑:刚刚将BINARY添加到字符串中;无论编码如何,这都应该有效。

答案 1 :(得分:0)

我遇到了这个问题而且很烦人,但可以解决。除了Â之外,您可能会发现您的数据中出现了大量字符,如下所示:     â€œ 这与数据库中的编码更改有关,但只要您在数据库中没有要保留的任何这些字符(例如,如果您实际使用的是欧元符号),那么您可以将它们删除一些MySQL命令如前所述。

在我的情况下,我有一个我继承的Wordpress数据库存在此问题,我在这里找到了一组有用的Word预制查询http://digwp.com/2011/07/clean-up-weird-characters-in-database/

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

答案 2 :(得分:0)

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

从这里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;

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