我们有一些使用拉丁字符集而不是 UTF-8 设置的表格,它允许在表格中输入错误字符,通常的罪魁祸首是人们从 Word 或 Outlook 复制/粘贴复制了那些讨厌的隐藏字符......
我们可以使用任何查询来识别这些字符以清除它们吗?
谢谢,
我们有一些使用拉丁字符集而不是 UTF-8 设置的表格,它允许在表格中输入错误字符,通常的罪魁祸首是人们从 Word 或 Outlook 复制/粘贴复制了那些讨厌的隐藏字符......
我们可以使用任何查询来识别这些字符以清除它们吗?
谢谢,
你可能会注意到类似这个'bug' 的东西。“坏字符”很可能是 UTF-8 控制字符(例如 \x80)。您也许可以使用类似的查询来识别它们
SELECT bar FROM foo WHERE bar LIKE LOCATE(UNHEX(80), bar)!=0
从那个链接的错误中,他们建议使用 typeBLOB
来存储 windows 文件中的文本:
如果您需要存储 windows 文件(甚至是文本文件),请使用 BLOB(带有附加编码字段)而不是 TEXT。优于 3 字节 UTF-8 和多层编码开销。
看看这个 Q/A(这都是关于你的客户端编码的SET NAMES
)
我假设您UTF8
在填写数据时设置了连接字符集。
MySQL
?
用(问号)替换不可转换的字符:
SELECT CONVERT('тест' USING latin1);
----
????
问题在于区分合法的问号和非法的问号。
通常,单词开头的问号是不祥之兆,因此:
SELECT *
FROM mytable
WHERE myfield RLIKE '\\?[[:alnum:]]'
应该给一个好的开始。