2013-08-04 80 views
2

我有一個應用程序在PHP 5上運行,並使用mysqli擴展訪問和存儲MySQL數據庫。該數據庫包含許多編碼爲UTF-8(排序規則utf8_swedish_ci)的表格。MySQL轉換字符集問題

不幸的是,它似乎mysqli的連接配置爲使用編碼ISO-8859-1的一切,這意味着我已經得到了含LATIN1數據UTF-8表。我正試圖通過將所有內容轉移到UTF-8來進行修復(因爲它應該是!)

有沒有內置的方法來處理這個問題?如果沒有,你會如何建議我處理這個問題?


編輯:什麼樣的數據看起來像同時通過它的所有瀏覽使用phpMyAdmin樣本:

handelë(應該是handelë

​​(應爲√skal

此外,數據在HTML文檔中輸出正確,只要我使用輸出編碼UTF-8,但保持我的sqli連接字符集爲latin1。這一切都相當混亂。

非常感謝您的幫助!

+0

嘗試'utf8_general_ci' –

+0

如何轉換數據而不破壞所有內容? – Leonard

+0

如果確實發生了腐敗事件,你可以在桌子上做一個'REPAIR'。 (我沒有用過多的字符集,但我只是給我2美分) – 1234567

回答

5

好的!所以這是必須發生的事情:

用戶界面(UTF-8)→控制器(UTF-8)→模型(ISO-8859-1)→數據庫(UTF-8,但它接收ISO-8859-1 )

所以這些字段被配置爲使用UTF-8編碼,但他們收到ISO-8859-1編碼數據。我想將錯誤編碼的數據轉換爲UTF-8。

由於數據實際上ISO-8559-1編碼,我解決了我用下面的小MySQL的問題,「黑客」:在計算器上

UPDATE `table` SET `column` = convert(cast(convert(`column` using latin1) as binary) using utf8) 

禮貌ABS

謝謝你的時間,看看我的問題,夥計們! :)