如何在MySQL上正确设置utf8mb4?
自从昨天以来,我在这个问题上失去了主意。如何在MySQL上正确设置utf8mb4?
我想我的MySQL数据库从UTF8到utf8mb4转换。要做到这一点,我也跟着这些网站/线程:https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4,Cannot store emoji in database,Change 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/ |
+--------------------------+----------------------------+
虽然我仍然有utf8
为character_set_client
和character_set_results
当我与phpMyAdmin检查(使用非超级用户权限)
当作为用户root
连接,init-connect
被忽略。
给你的应用程序自己的登录没有SUPER
特权。
然后,作出额外的确认,只要建立从您的应用程序的连接,做提供的字符集的特定语言的方法。 (或者执行SET NAMES utf8mb4
。)您使用的是什么应用程序语言?
万一别的东西是怎么了,看到“最佳实践”在Trouble with utf8 characters; what I see is not what I stored
THX了很多的关注。我只是编辑线程来添加字符/整理的东西与标准的用户访问数据库。结果更好但仍不完美。 我快速查看了你的链接文章,你的解释非常好。我一回到工作岗位就会尝试。我会告诉你,如果有什么工作。 (顺便说一句,我试过'HEX(TXT)'的东西,结果是好的,一切都像预期的那样“十六进制编码”)。无论如何,我保持你的联系很快。 THX再次 – Vae
嘿里克,这里的消息:我设置你的“你应该做的”部分提到的一切。数据的测试是好的(没有双重编码,每个字符都能正确识别)。 我的问题是:我有问号的数据库,而不是表情符号,(但是他们在我的网站上正确显示)。你写道:“要存储的字节不会被编码为utf8/utf8mb4。解决这个问题。”我怎样才能解决这个问题 ? 仅供参考,我正在使用php。 Thx再次为您的利益。再见。 – Vae
“解释非常好” - 我讨厌管理多少年,我一直在磨练这些解释。 –