2012-05-22 70 views
0

我們有一些使用拉丁字符集而不是UTF-8設置的表,它允許在表中輸入錯誤的字符,通常的罪魁禍首是人們從Word或Outlook複製/粘貼這些令人討厭的隱藏字符。 ..MySQL查詢識別錯誤的字符?

是否有任何查詢我們可以用來識別這些字符來清理它們?

感謝,

+2

好了,這角色你叫「*壞字符*」? – Lion

+0

我們的銷售人員傾向於複製/粘貼電話號碼很多,我們得到以下表格803-644-0100- – xXPhenom22Xx

+0

或類似的東西>> 803-644-0100「 – xXPhenom22Xx

回答

0

我假設你的連接chacater組設置爲UTF8當您填寫的數據

MySQL替換unconvertable字符?(問號):

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

---- 
???? 

問題是區分合法問號和非法問題。

通常,在一個字開頭的問號是一個不好的跡象,所以這樣的:

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

應該給一個良好的開端。

+0

Out字符集被錯誤地設置爲拉丁文......不用說這個表格很大,並且確實有一些不好的數據。如果我們將字符集過夜切換爲UTF8,它會重新編制索引並解決問題? – xXPhenom22Xx

+1

@ xXPhenom22Xx:不,它不會。超出範圍的值不會被神奇地轉換回來。 – Quassnoi

0

您可能注意到了這樣的信息'bug'。 '壞字符'很可能是UTF-8控制字符(例如\ x80)。你也許可以使用查詢,以確定他們像

SELECT bar FROM foo WHERE bar LIKE LOCATE(UNHEX(80), bar)!=0 

從這個鏈接錯誤,他們建議使用類型BLOB存儲從Windows文件中的文本:

使用BLOB(額外編碼字段),而不是如果您需要存儲Windows文件(甚至文本文件),則爲TEXT。優於3字節的UTF-8和多層編碼開銷。

看看this Q/A(這是所有關於你的客戶端編碼又稱SET NAMES