我希望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編碼還是數據庫不相信它?需要做些什麼來糾正這一點?
感謝您的建議;但是,它沒有解決問題。我通過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
您可以嘗試運行ALTER TABLE表名CONVERT TO CHARACTER SET utf8以確保數據以UTF8存儲。 –