2017-05-07 113 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

“解释非常好” - 我讨厌管理多少年,我一直在磨练这些解释。 –