我们有一些表格是用拉丁字符集设置的,而不是UTF-8,它允许坏字符输入到表格中,通常的罪魁祸首是人们从Word或Outlook复制/粘贴这些讨厌的隐藏字符...
有没有什么查询可以用来识别这些字符来清理它们?
谢谢,
发布于 2012-05-22 23:48:45
我假设在您填充数据时,您的连接字符集设置为UTF8。
MySQL将无法转换的字符替换为? (问号):
SELECT CONVERT('тест' USING latin1);
----
????问题是如何区分合法和非法的问号。
通常,单词开头的问号是一个不好的信号,所以这是:
SELECT *
FROM mytable
WHERE myfield RLIKE '\\?[[:alnum:]]'应该会有一个好的开始。
发布于 2012-05-22 23:56:22
您可能注意到了类似这样的'bug'。“错误字符”很可能是UTF-8控制字符(例如\x80)。您也许能够使用如下查询来识别它们
SELECT bar FROM foo WHERE bar LIKE LOCATE(UNHEX(80), bar)!=0从这个链接的bug中,他们建议使用类型BLOB来存储windows文件的文本:
如果您需要存储windows文件(甚至是文本文件),则
使用BLOB (带有附加编码字段)而不是文本。优于3字节UTF-8和多层编码开销。
看看this Q/A (这一切都是关于你的客户端编码,也就是SET NAMES )
https://stackoverflow.com/questions/10705259
复制相似问题