【问题标题】:How to finally set utf8mb4 properly on MySQL?如何最终在 MySQL 上正确设置 utf8mb4?
【发布时间】:2017-10-05 10:10:24
【问题描述】:

从昨天开始我就在这个问题上失去理智了。

我正在尝试将我的 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 版本是 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(非超级用户访问)核实时,我仍然有 utf8 用于 character_set_clientcharacter_set_results

【问题讨论】:

    标签: mysql utf8mb4


    【解决方案1】:

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

    为您的应用程序提供自己的登录 SUPER 特权。

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

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

    【讨论】:

    • 非常感谢您的关注。我刚刚编辑了线程以添加具有对数据库的标准用户访问权限的字符/整理内容。结果更好,但仍然不完美。我快速浏览了您的链接帖子,您的解释非常好。我一下班回来就试试。我会告诉你,如果有什么工作。 (顺便说一句,我尝试了HEX(txt) 的东西,结果很好,一切看起来都像预期的那样“十六进制编码”。)无论如何,我会尽快与您联系。再次感谢
    • 嘿,瑞克,这里有新闻:我将你提到的所有内容都设置在“你应该做什么”部分。数据测试良好(没有双重编码,每个字符都被正确识别)。我的问题是:我在数据库中有问号而不是表情符号(但是它们在我的网站中正确显示)。您写道“要存储的字节未编码为 utf8/utf8mb4。修复此问题。”我怎样才能解决这个问题 ?仅供参考,我正在使用 php。再次感谢您的兴趣。很快再见。
    • “解释非常好”——我讨厌管理这些解释我已经磨练了多少年。
    • 一个 Emoji 以 ? 的身份进入表格?这意味着您没有以utf8mb4 INSERTing 连接。它是不可恢复的。我需要在“问号”中说明什么?
    • 你看到我最后的编辑了吗?似乎所有内容都按预期保存在数据库中。我认为 phpmyadmin 配置错误:当我用它登录数据库时,我有一些 utf8 。当我使用 php 查看我的网站或使用内联命令登录 mysql 时,所有内容都设置为 utf8mb4....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2021-11-27
    • 2016-08-12
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多