我將要完成將數據庫從Latin1轉換爲UTF-8的繁瑣和棘手的任務。如何檢測Latin1編碼列中的UTF-8字符 - MySQL
在這一點上,我只是想檢查我的表中存儲了哪些數據,因爲這將決定我應該使用什麼方法來轉換數據。
具體來說,我想檢查在Latin1列中是否有UTF-8字符,那麼最好的方法是什麼?如果只有幾行受到影響,那麼我可以手動修復此問題。
選項1.執行MySQL轉儲並使用Perl搜索UTF-8字符?
選項2.使用MySQL CHAR_LENGTH查找具有多字節字符的行? 例如SELECT name FROM clients WHERE LENGTH(name) != CHAR_LENGTH(name);
這夠了嗎?
此刻我已將我的Mysql客戶端編碼切換爲UTF-8。
根據定義,您不能在Latin1列中存儲UTF-8數據。謹慎地爲您的問題提供更多的背景信息? – deceze 2012-02-16 02:07:45
UTF-8多字節字符都大於128.但實際上有**無法**來確定字符的意圖是什麼:我認爲你想要問的是「我可以檢測到非ASCII字符一個Latin1編碼列「。顯然,由於字節序列0xF0 0x53意味着UTF-8和拉丁語1中的兩個不同的東西,所以即使找到它,也不知道它是哪一個... – Borealid 2012-02-16 02:09:12
@deceze您可能無意中將UTF-8數據存儲在LATIN1中列,因爲LATIN1是一個8位字符集。它只是看起來像一個混亂的編碼錯誤。 – tadman 2012-02-16 03:38:25