在此过程中的某个地方,在我所做的所有导入和导出之间,我运行的博客上的很多文本都充满了怪异的重音A字符。例如:
http://teamsoell.com/andy/petnames(我知道的内容)
当我使用mysqldump导出数据并将其加载到文本编辑器中,目的是使用搜索和替换来清除不良字符时,搜索只匹配每个“a”字符。
有没有人知道我能成功追捕这些角色并摆脱它们,无论是直接在MySQL中还是使用mysqldump然后重新导入内容?
答案 0 :(得分:10)
这是编码问题; Â
是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 'Â', '' )
那应该删除那些字符(基于你链接的页面,你真的不想要那里,因为你最终会在句子之间连续三个空格等等,你应该只有一个)。
如果它不起作用,那么你需要查看正在使用的编码和校对。
编辑:刚刚将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;
上面的查询将其替换为空格,然后可以应用普通修剪或简单地替换为''。