表情符号显示为?在 MySQL 数据库中

Posted

技术标签:

【中文标题】表情符号显示为?在 MySQL 数据库中【英文标题】:emoji display as ? in MySQL database 【发布时间】:2017-03-16 09:56:21 【问题描述】:

表情符号存储为?在我的数据库中(当我使用 phpMyAdmin 可视化它们时),但是当我使用一个简单的请求(来自 php)检索它们时,我得到了真正的价值。

数据库行(使用 phpMyAdmin)

来自 php 的请求

$query = "SELECT id,com
          FROM coms_table
          WHERE id = 627";

结果

id     com  
627    \ud83d\ude0e

使用这个命令

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

我明白了:

my.cnf 文件:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
default-storage-engine=MyISAM
innodb_file_per_table=1
performance-schema=0
innodb_buffer_pool_size=134217728
max_allowed_packet=268435456
open_files_limit=10000
local-infile=0
character-set-client-handshake = TRUE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

总而言之,这个问题只发生在我使用 phpMyAdmin 连接到数据库时。最糟糕的是,当我尝试使用 phpMyAdmin 导入数据库时​​,所有问号都被替换为真“?”,并且数据最终丢失。

编辑 1 phpMyAdmin>变量 会话值(utf8)与预期值(utf8mb4)不同

【问题讨论】:

你运行的是什么版本的phpMyAdmin?听起来它不支持您正在使用的字符编码。 @RyanLaBarre 我正在运行 phpMyAdmin 的 4.0.10.14 版本 【参考方案1】:

这似乎是一个 phpMyAdmin 错误(已在 4.6.4 版本中更正)。 当您使用 phpMyAdmin 连接到数据库时,会话的变量(如 character_set_clientcharacter_set_results)不会使用默认值初始化。 看到这个commit。

如果您有此错误并希望导入/导出您的数据库,请不要使用 phpMyAdmin。 作为一种解决方法,使用this link 执行导入操作,并使用this link 上的文档执行导出操作。

【讨论】:

【参考方案2】:

你需要character_set_client, _connection, and _results 都是utf8mb4。其余的都无所谓。

单个问号可能意味着数据在插入时丢失。 (1 个表情符号的 4 个问号表示不同的问题。)

【讨论】:

我尝试在 utf8mb4 编辑 my.cnf 文件 (/etc/my.cnf) 上设置 character_set_clientcharacter_set_results 但没有效果跨度> 我已经编辑了我的帖子,您可以看到character_set_client character_set_results 的值等于utf8mb4。但是会话值是不同的。任何想法? (我已经重启了mysql并重启了服务器) 我不清楚这些设置如何,甚至 如果,这些设置如何通过会话。连接时,应建立客户端正在使用的字符集。这是由不同的客户以不同的方式完成的。一些列出了here

以上是关于表情符号显示为?在 MySQL 数据库中的主要内容,如果未能解决你的问题,请参考以下文章

将表情符号备忘单转换为安卓表情符号?

将 IOS 表情符号转换为 web 或 android 表情符号代码

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

表情符号未插入数据库节点 js mysql

无法将表情符号存储在数据库中

如何在 Azure mysql 数据库中支持表情符号