2011-08-22 257 views
4

我希望MySQL中的所有數據都是UTF8編碼。我已經將所有的字符集和歸類設置爲數據庫,表和列的UTF8。在將任何內容寫入數據庫之前,我使用PHP中的mb_detect_encoding來檢查它是否爲UTF8。因此,我相信所有的數據都是UTF8編碼的。MySQL UTF8數據沒有正確顯示

但是,這裏有個問題:將這個單詞Ríkarðsdóttir從數據庫中查詢出來並通過PHP在UTF8編碼的網頁上顯示時顯示正確。如果我通過phpMyAdmin查詢這個相同的記錄,我得到RâkarÃsdóttir。如果我使用MySQL命令行也是如此。

Running SHOW VARIABLES returns to me: 
character_set_client utf8, 
character_set_connection utf8, 
character_set_database utf8, 
character_set_filesystem binary, 
character_set_results utf8, 
character_set_server latin1, 
character_set_system utf8 

只有服務器是latin1,我在一個共享的託管站點,不相信我可以改變這一點。這可能是問題嗎?

以下是我不明白的:爲什麼我的UTF8網頁正確顯示Ríkarðsdóttir,但UTF8編碼的phpMyAdmin網頁顯示它爲Räkarðsdóttir?數據不是真正的UTF8編碼還是數據庫不相信它?需要做些什麼來糾正這一點?

回答

3

嘗試運行此查詢您連接之後:

SET NAMES UTF8 

你的數據庫需要存儲數據的UTF8,和你的網頁標題也應該有一個UTF8聲明,但你的數據庫連接也需要使用UTF8。您可以在命令行和/或通過PHPMyAdmin運行它。那個「查詢」之後的所有通信都將被UTF8編碼。

+1

感謝您的建議;但是,它沒有解決問題。我通過mysql shell嘗試了SET NAMES的'utf8'查詢,並將它添加到phpMyAdmin中,但在任何情況下都不會影響數據的顯示。 根據mysql文檔:http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html,SET NAMES'x'語句等同於以下三條語句: SET character_set_client = x ; SET character_set_results = x; SET character_set_connection = x 根據SHOW VARIABLES查詢,它們都設置爲UTF8。不知何故,似乎mysql似乎正在以某種其他編碼(latin1)存儲UTF8數據。 – jkharlan

+0

您可以嘗試運行ALTER TABLE表名CONVERT TO CHARACTER SET utf8以確保數據以UTF8存儲。 –