2013-01-23 18 views
6

我想將表情符號保存到MySql數據庫中,並且我意識到,三個字節表情符號被正確保存在數據庫中,但4個字節的表情符號已被保存爲問號。看起來我完全將utf8轉換爲utf8mb4,但我不知道這裏錯過了什麼。我的MySQL版本是5.5.29,當我在MySQL外殼中一個SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';,它顯示以下內容:phpMyAdmin mysql保存表情符號爲問號

+--------------------------+--------------------+ 
| Variable_name   | Value    | 
+--------------------------+--------------------+ 
| character_set_client  | utf8mb4   | 
| character_set_connection | utf8mb4   | 
| character_set_database | utf8mb4   | 
| character_set_filesystem | binary    | 
| character_set_results | utf8mb4   | 
| character_set_server  | utf8mb4   | 
| character_set_system  | utf8    | 
| collation_connection  | utf8mb4_unicode_ci | 
| collation_database  | utf8mb4_unicode_ci | 
| collation_server   | utf8mb4_unicode_ci | 
+--------------------------+--------------------+ 

現在,對於測試目的,我只有1個數據庫創建,用於測試的表情符號節省1臺。我通過phpmyadmin創建的數據庫,並通過mysql外殼創建表:

CREATE TABLE `test_emojis` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

,它仍然無法正常工作(還是問號)。但是,我發現了一些有趣的事情,我在phpMyAdmin中看到了問號,但是如果我在test_emoji中鍵入select *,則可以在Mysql shell中正確地看到emoji圖標;但是,有任何想法嗎?

有人可以幫忙嗎?

感謝

+0

您確定您的客戶端(phpMyAdmin)實際使用utf8mb4字符集連接到服務器嗎?在phpMyAdmin中重複上述查詢 –

+1

嗨,米歇爾,感謝您的提醒,我想到了,我的myphpadmin實際上仍在使用utf8,這就是爲什麼我無法在phpmyadmin客戶端上看到它,但能夠在MySQL shell中看到它。但是,我在這裏有一個新問題。請閱讀這篇文章:http://stackoverflow.com/questions/14488503/ios-cannot-decode-emoji-unicode-in-json-format-correctly-and-emoji-icons-are-di – user2002692

回答

3

phpMyAdmin的硬編碼了字符集utf8所以你必須編輯它的代碼來改變這種狀況。對於將來的版本,它在fb30c14中修復(這也說明你也可以在哪裏更改這些值)。

2

將您的phpMyAdmin升級到> = 4.3.9並解決問題。