mysql - 如何最终在 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 排序规则,她的所有表也是。

然而,当我继续 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collat​​ion%'; 我得到:

#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 版本是 5.5.54,全部设置在 debian 7 中。

有没有人有线索可以帮助我?

谢谢你的帮助,抱歉我的英语不好......

编辑

有趣的事实:当我检查在线命令中的变量时,我得到了这个:

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/ |
+--------------------------+----------------------------+

当我检查 phpmyadmin(非 super 用户访问权限)时,character_set_clientcharacter_set_results 仍然有 utf8

最佳答案

当以用户 root 连接时,init-connect 被忽略。

为您的应用程序提供自己的登录名,没有 SUPER 权限。

然后,为了更加确定,无论何时从您的应用程序建立连接,都执行提供字符集的特定于语言的方法。 (或执行 SET NAMES utf8mb4。)您使用的是哪种应用语言?

如果出现其他问题,请参阅 Trouble with utf8 characters; what I see is not what I stored 中的“最佳实践”

关于mysql - 如何最终在 MySQL 上正确设置 utf8mb4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830160/

相关文章:

mysql - 为什么MySql无法读取这个文件?

mysql - 更新查询不工作 Node js

php - 我的 PHP/MySQL 语法错误在哪里?

mysql - 从 Innodb 迁移到 NDB 的障碍和问题?

python - 如何使用python+MySQLdb创建utf8mb4数据库,mysql命令行已经显示utf8mb4,但数据库仍然是utf8

mysql - 在 MySQL 中将表从 utf8 更新为 utf8mb4 是否安全?

php - 存储过程 'IF' 语句 + 'UPDATE' 或 'INSERT' 基于空字段

mysql - 表情符号未正确存储在 MySQL 5.6 中,排序规则为 utf8mb4

php - mysqli 没有将字符集设置为 utf8mb4

mysql - 将 phpMyAdmin 导出的数据库转换为旧版本。 utf8mb4 问题