2011-04-02 25 views
0

我有問題從斯拉夫語言獲取字符,如Š。當它們包含在輸出中時,它們顯示爲菱形問號符號。某些字符無法顯示使用UTF-8

我的數據庫連接設置爲使用爲utf8:

@mysql_query("SET NAMES 'utf8_unicode_ci' COLLATE 'utf8_unicode_ci'"); 

大多數多語言字符出現在屏幕上。我不確定我是否已經正確設置了字符集。它似乎工作在匈牙利語,西班牙語,葡萄牙語,只是不是斯拉夫!

問題在哪裏?

該字段中有許多可能的字符,這使得不可能選擇像latin2這樣的特定非utf8字符集。

這是一個全新的數據庫,從頭開始創建。 phpMyAdmin顯示屏幕上的字符,所以我猜這個問題不是用MySQL,而是PHP。但是,我已經設置了正確的utf8聲明。

+0

請問你可以用SHOW CREATE TABLE的結果編輯你的問題嗎?另外,您是否確定*您正在使用正確的「SET NAMES」查詢?你使用的那個看起來不正確 - 你在兩個位置都指定了一個*排序規則*名稱(「_ci」),這是無效的。 – Charles 2011-04-02 05:01:31

+1

當你說「屏幕」你在說瀏覽器,或者你在你的編輯器中用PHP說話嗎?如果它在你的編輯器中,那麼你需要確保你的編輯器可以處理這些編碼。例如在vim中,你需要':set enc = utf-8'。 – 2011-04-02 05:20:19

+0

感謝您的幫助!奇怪的是,儘管在編輯器中它*看起來*要顯示字符(禮貌地問它,否則它顯示ascii),在中間,在上傳到服務器,字符飛走...服務器說它的工作原理在UTF8和SQL數據似乎正確設置...在哪裏可以有毛刺? (我從來沒有在UTF工作,所以我不知道我可以有什麼毛病,因爲) – BlondieMarlenne 2011-04-04 15:30:26

回答

0

嘗試用'utf8_general_ci'替換'utf8_unicode_ci'。

例如我用

@mysql_query("SET NAMES 'utf8_general_ci' COLLATE 'utf8_general_ci'"); 

從塞爾維亞拉丁語如šđčćž和塞爾維亞西里爾語(абвгдђежзијклљмнњопрстћуфхцчџш)顯示在我的網站特定的字符。我不知道這是否會導致你的問題,因爲我從來沒有使用'utf8_unicode_ci'。

把你的原始問題的更多細節和一些代碼。

3

用了幾個小時來檢查和測試所有可能的區域。 最後我在這裏找到了解決辦法:

UTF-8 all the way through 頂部答案有幫助。

我發現的問題是「數據訪問」。 修復使用

$set_utf = mysql_query("SET NAMES 'utf8' ") 
      or die(mysql_error());  

希望它可以幫助別人了。