2012-02-22 44 views
0

我有一個Mysql表與多種語言,一種語言的字段。mysql保加利亞語言,字符集

我的字符集是utf_general_ci

當我凝視與phpMyAdmin表我有一個保加利亞頁面看起來像這樣:

За Ð½Ð°Ñ 

這是一個標題。這個相同的標題出現在這樣的網站:

За нас (this is correct) 

我做錯了什麼?

+0

請參閱[如何在Web應用程序中處理Unicode](http://kunststube.net/frontback)。我的猜測:通常缺少**連接編碼**。 – deceze 2012-02-22 08:10:58

+0

好文檔,書籤! – Klaaz 2012-02-22 08:37:55

回答

3

OK,嘗試的記錄您的實際取之前執行這些查詢:

mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 

之後與你查詢的執行進行。上述查詢,如果當然,必須在當前數據庫連接的上下文中。

+0

對不起,我不能讀保加利亞;-) – Klaaz 2012-02-22 08:24:25

+0

迄今爲止沒有成功。奇怪的字符(Ð-анÐÐÑÑ)在數據庫中出現,是否正常? – Klaaz 2012-02-22 08:52:13

+0

不,這是不正常的,很可能它們已經被插入了錯誤的編碼。 – bodi0 2012-02-22 09:01:51

1

這看起來像數據是UTF-8編碼的,因此在聲明爲UTF-8編碼的網頁上工作良好,但在程序無法處理或未設置爲應用UTF-8時無法正常工作。

例如,出現兩次的字符是U + 00B0 U + 00D1。字節0xB0和0xD1是西里爾文小寫字母a,U + 0430的UTF-8格式,它出現在正確文本的相應位置。顯然,根據ISO-8859-1,Windows-1252或某些類似的8位編碼,UTF-8數據被誤解了。

1

表中的字段使用了什麼字符集? 您可以分享這些字段的SHOW CREATE TABLE命令的相關部分嗎?

因爲ISO-8859-1是mysql的默認數據庫字符集,並且它大多沒有進行任何轉換,所以人們使用它作爲BINARY,並將UTF-8編碼的西里爾文存儲到它中。這對於Web開發工具非常有效,因爲它們綁定到字段並以UTF-8編碼的二進制字節接收數據,然後在沒有轉換的情況下將其放入網頁中,表明它使用utf-8編碼輸出。所以數據只是通過,沒有正確編碼數據庫使用。當然,當你在數據庫中進行操作時,這會導致各種問題(例如獲取字符與字節長度並嘗試正確排序)。但對於基本的存儲/檢索操作,它看起來像是在工作。 對於非本地化的Web應用程序,這是非常典型的行爲,假設他們最多使用ASCII或ISO-8859-1。 對此的補救措施是使用UTF-8編碼創建新的表集,然後將錯誤編碼的utf-8數據顯式轉碼爲寬字符,然後將這些數據放入utf-8表,以便數據庫知道正確的編碼使用。