2011-07-11 195 views
8

我有一個數據庫充滿了像♥•â—♥ Dhaka ♥•â—♥(應該是♥•●♥ Dhaka ♥•●♥),因爲我沒有在創建數據庫時指定排序規則。
現在我想修復它。我無法從第一個地方獲取數據。所以我在想,如果有可能在php腳本中獲取數據並將其轉換爲正確的字符。
我已將數據庫和字段的排序規則更改爲utf8_general_ci ..使用PHP將latin1_swedish_ci轉換爲utf8

+0

我怎樣才能得到原始文本從?????? –

回答

14

排序規則與字符集不同。排序規則僅用於文本的排序和比較(這就是爲什麼有一個語言術語)。實際的字符集可能不同。

最常見的故障不在數據庫中,而是在PHP和MySQL之間的連接中。連接的默認字符集通常是ISO-8859-1。您需要更改連接後執行的第一件事,即使用SQL查詢SET NAMES 'utf-8';mysql_set_charset函數。

還要檢查表格的字符集。如果你還沒有指定UTF-8開頭(這又與排序規則不一樣),那麼這可能是錯誤的。但請務必在更改任何內容之前進行備份。 MySQL會嘗試轉換上一個字符集,因此如果您實際上在ISO-8859-1表中保存了UTF-8數據,則可能需要從備份中重新加載數據。

+0

好的。這些字符是否會在'utf8_general_ci'字符集中完全像這樣保存?我怎麼知道當這些字符被保存時使用了什麼字符集呢? –

+1

utf8_general_ci不是一個字符集,它是一個整理。實際的字符集稱爲utf-8,是表的另一個屬性。 utf-8能夠對大多數字符進行編碼,因此是的(實際上,SO本身使用UTF-8,因此如果對您的問題的回答是「否」,您將無法向我顯示字符)。至於第二個問題,首先檢查你的表格以及連接在保存文本時的字符集。 –

+0

謝謝。我現在得到它。 :)將mysql_set_charset設置爲utf8有助於新條目。研究其他細節。 :) –

2

我想看看mb_detect_encoding()mb_convert_encoding(),看看他們能否幫到你。

+0

當我使用mb_detect_encoding編碼時,在兩種情況下,它都聲稱它的UTF- 8。現在該怎麼辦? –

+1

聽起來像一個破碎的編碼問題。閱讀此:http://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding – AlienWebguy