MySQL查询识别坏字符?

时间:2012-05-22 15:34:18

标签: mysql

我们有一些使用拉丁字符集而不是UTF-8设置的表,它允许将坏字符输入到表中,通常的罪魁祸首是人们从Word或Outlook复制/粘贴这些令人讨厌的隐藏字符...

我们可以使用任何查询来识别这些字符以清除它们吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

我假设您填写数据后,您的连接字符集设置为UTF8

MySQL?(问号)替换不可转换的字符:

SELECT  CONVERT('тест' USING latin1);

----
????

问题在于区分合法问号与非法问号。

通常,单词开头的问号是一个坏符号,所以这个:

SELECT  *
FROM    mytable
WHERE   myfield RLIKE '\\?[[:alnum:]]'

应该是一个良好的开端。

答案 1 :(得分:0)

你可能会注意到这样的事情'bug'。 “坏字符”很可能是UTF-8控制字符(例如\ x80)。您可以使用

之类的查询来识别它们
SELECT bar FROM foo WHERE bar LIKE LOCATE(UNHEX(80), bar)!=0

根据该链接的错误,他们建议使用类型BLOB来存储来自Windows文件的文本:

  

如果需要存储Windows文件(甚至是文本文件),请使用BLOB(带附加编码字段)代替TEXT。优于3字节UTF-8和多层编码开销。

查看this Q/A(这是关于您的客户端编码又名SET NAMES