問題摘要:在UTF8和Latin1的表ISO-8859-1的數據轉換爲UTF-8
雖然試圖用mysql數據庫網站latin1和UTF8轉換,一些特殊字符無法正確顯示,儘管確保字符集都是utf8系統。
問題詳細信息:
這是一個常見的問題。但我似乎增加了複雜性。
幾年前,一個不知情的開發者(我),把一個網站與MySQL放在一起。一些表格使用latin1_swedish_ci和utf8_general_ci進行設置。所有的輸入/顯示都是通過帶有iso-8859-1字符集的頁面完成的。
現在,我的任務是將所有這些數據轉換爲utf-8,並最終統一編碼。但是,我在兩種情況下都遇到過許多特殊字符(例如:ü)。這些字符似乎無法在UTF-8頁面上正確顯示。它們顯示爲Ins.而不是當在mysql查詢瀏覽器中查看utf8表中的數據時,正確輸入的utf8'd'u'顯示爲某些特殊字符,而拉丁文'u'顯示不正確,因爲它應該顯示在頁面上。但事實並非如此。
我已經嘗試了一些事情:
- Percona的腳本:https://github.com/rlowe/mysql_convert_charset
- 山坳轉換爲二進制,然後以UTF8
- UTF8轉換表,拉丁,然後重複上面的過程
似乎沒有什麼治療數據。
轉儲整個數據庫和重要的是不是一個真正可行的選擇,因爲它現在是一個巨大的數據庫,停機時間受到限制。
UPDATE(10月22日 - 2013年)
我已經採取@deceze建議和審查我的所有內容編碼領域的每http://kunststube.net/frontback/。我確實發現了一些我仍然在latin1中傳遞/編碼數據的地方。所以,我現在已經將它全部更改爲UTF-8。但是,數據在特定字段中仍然顯示不正確。在一個utf8表格中(沒有列有隱式編碼),field1在latin1中。我可以通過運行顯示正確的文字下面證實了這一點:從我的表
選擇轉換(CAST(轉換(FIELD1使用LATIN1)作爲二進制使用 UTF8))WHERE ID = 1
這會將Hahnemühle轉換爲Hahnemühle。
在字段2中,數據顯示爲不同的(未知)編碼。上面的查詢在field2上使用時,將Hahnem�hle轉換爲Hahnem hle。我已經通過http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html取代latin1的所有字符,但沒有一個似乎正確地將數據吐出。
這些「問題」到底是什麼?這些字符是否正確存儲在各自的列中?當他們在一個體面的管理界面上查看他們時,他們是否應該看起來像他們應該看的,還是他們已經亂碼?除非您嘗試在Latin1列中存儲非Latin1字符,否則到目前爲止設置這些列的設置並不重要。 latin1列不能存儲多於由Latin-1定義的256個字符,只是在日常使用中無關緊要。如果您使用正確的連接編碼插入數據,則應該沒有問題。 – deceze
@deceze我添加了這個問題(對不起)。這些字符在utf-8頁面上沒有正確顯示。相反,我在Google Chrome中收到一個鑽石問號。在mysql查詢瀏覽器中查看utf8表中的數據時,正確輸入的utf8'd'u'將顯示爲一些特殊字符,而不正確的latin1'u'則顯示爲它應該出現在頁面上。但事實並非如此。 – David
您是否更新了連接編碼,因此來自數據庫的數據實際上是UTF-8編碼?或者你仍然在檢索Latin-1中的數據? – deceze