2017-05-07 112 views
0

自從昨天以來,我在這個問題上失去了主意。如何在MySQL上正確設置utf8mb4?

我想我的MySQL數據庫從UTF8到utf8mb4轉換。要做到這一點,我也跟着這些網站/線程:https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4Cannot store emoji in databaseChange MySQL default character set to UTF-8 in my.cnf?

我的數據庫似乎有像預期的那樣utf8mb4_unicode_ci collation,她的所有表了。

然而,當我開始SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';我獲得:

#With a Root access 
Variable_name    Value 
character_set_client  utf8    #expecting utf8mb4 
character_set_connection utf8    #expecting utf8mb4 
character_set_database  utf8mb4    #good 
character_set_filesystem binary    #good 
character_set_results  utf8    #expecting utf8mb4 
character_set_server  utf8mb4    #good 
character_set_system  utf8    #expecting utf8mb4 
collation_connection  utf8_general_ci  #expecting utf8mb4_unicode_ci 
collation_database   utf8mb4_unicode_ci #good 
collation_server   utf8mb4_unicode_ci #good 

#With a standard user access 
Variable_name    Value 
character_set_client  utf8    #expecting utf8mb4 
character_set_connection utf8mb4    #good 
character_set_database  utf8mb4    #good 
character_set_filesystem binary    #good 
character_set_results  utf8    #expecting utf8mb4 
character_set_server  utf8mb4    #good 
character_set_system  utf8    #expecting utf8mb4 
collation_connection  utf8mb4_unicode_ci #good 
collation_database   utf8mb4_unicode_ci #good 
collation_server   utf8mb4_unicode_ci #good 

我設置了/etc/mysql/conf.d/90-my.cnf文件是這樣的:

[client] 
default-character-set = utf8mb4 

[mysql] 
default-character-set = utf8mb4 

[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init-connect = 'SET collation_connection = utf8mb4_unicode_ci' 
init-connect = 'SET NAMES utf8mb4' 

我的MySQL版本是54年5月5日,所有集一個debian 7。

有沒有人有一個線索,以幫助我嗎?

THX對您有所幫助,併爲我的英語不好對不起......

編輯

有趣的事實:當我在在線命令檢查變量,我得到這個:

mysql> show variables like "%character%"; 
+--------------------------+----------------------------+ 
| 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      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

雖然我仍然有utf8character_set_clientcharacter_set_results當我與phpMyAdmin檢查(使用非超級用戶權限)

回答

0

當作爲用戶root連接,init-connect被忽略。

給你的應用程序自己的登錄沒有SUPER特權。

然後,作出額外的確認,只要建立從您的應用程序的連接,做提供的字符集的特定語言的方法。 (或者執行SET NAMES utf8mb4。)您使用的是什麼應用程序語言?

萬一別的東西是怎麼了,看到「最佳實踐」在Trouble with utf8 characters; what I see is not what I stored

+0

THX了很多的關注。我只是編輯線程來添加字符/整理的東西與標準的用戶訪問數據庫。結果更好但仍不完美。 我快速查看了你的鏈接文章,你的解釋非常好。我一回到工作崗位就會嘗試。我會告訴你,如果有什麼工作。 (順便說一句,我試過'HEX(TXT)'的東西,結果是好的,一切都像預期的那樣「十六進制編碼」)。無論如何,我保持你的聯繫很快。 THX再次 – Vae

+0

嘿裏克,這裏的消息:我設置你的「你應該做的」部分提到的一切。數據的測試是好的(沒有雙重編碼,每個字符都能正確識別)。 我的問題是:我有問號的數據庫,而不是表情符號,(但是他們在我的網站上正確顯示)。你寫道:「要存儲的字節不會被編碼爲utf8/utf8mb4。解決這個問題。」我怎樣才能解決這個問題 ? 僅供參考,我正在使用php。 Thx再次爲您的利益。再見。 – Vae

+0

「解釋非常好」 - 我討厭管理多少年,我一直在磨練這些解釋。 –