允许 MySQL 以 utf8mb4 编码存储表情符号?

Posted

技术标签:

【中文标题】允许 MySQL 以 utf8mb4 编码存储表情符号?【英文标题】:Allow MySQL to store emojis in utf8mb4 encoding? 【发布时间】:2016-12-06 12:58:19 【问题描述】:

我想将表情符号(android 或 iphone)存储在我的 mysql 数据库中,我尝试了很多教程和 SO 帖子,在互联网上,例如:

How to insert utf-8 mb4 character(emoji in ios5) in mysql?

http://andy-carter.com/blog/saving-emoticons-unicode-from-twitter-to-a-mysql-database

MySQL utf8mb4, Errors when saving Emojis

我改变了那些 tuts 需要的所有东西。我现在有以下 mysql 配置:

character_set_client : utf8mb4

character_set_connection : utf8mb4

character_set_database : utf8mb4

character_set_filesystem:二进制

character_set_results : utf8mb4

character_set_server : latin1

character_set_system :utf8

collat​​ion_connection:utf8mb4_unicode_ci

collat​​ion_database : utf8mb4_unicode_ci

collat​​ion_server : latin1_swedish_ci

但我仍然无法在我的 mysql 数据库中存储 4 位表情符号,我有“????”,这很烦人。

请帮忙。

【问题讨论】:

你的假设是错误的。 MySQL肯定保存了它。您正在提取信息并显示它错误。由于您没有告诉我们您使用什么来查看这些字符 - 剩下的就是猜测。 非常感谢您回答我。请,我使用 html 标签和 php 工具(如 echo)在我的网站上显示它。您还需要其他信息吗? 您的 HTML 页面必须设置为正确显示 utf8。 PHP 和 MySQL 之间的连接必须设置为utf8。您可以通过谷歌搜索有关这些主题的更多信息,这比我在这里发布链接要好得多(SO 也有很多答案)。 非常感谢。我在我的 html 页面中将元标记更改为 ,但问题仍然存在,我无法显示以 utf8mb4 编码的表情符号。谢谢 【参考方案1】:

“4 字节”,而不是“4 位”。

列/表必须是CHARACTER SET utf8mb4

<meta charset="UTF8">,不是 utf8mb4——这是与 HTML 对话,而不是 MySQL。在 MySQL 之外,正确的名称是“UTF-8”或“UTF8”; utf8mb4 是一个 MySQL 组合。

见https://***.com/a/38363567/1766831中的“问号”

正好 4 个问号表示该列未更改。使用ALTER TABLE ... CONVERT TO ...;

【讨论】:

非常感谢您的回答,请原谅我的延误。但是经过几次尝试,我遇到了同样的问题。我查看了您的链接并尝试了所有建议,尤其是关于问号问题(与我的问题非常相似)的建议,但没有任何效果。 让我们检查一下其他内容——请在该链接中输入SELECT .. HEX ...。如果你得到3F3F3F3F,那么问号被存储了,数据就丢失了。 让我们看看 mysqli_* 或 PDO 中的连接参数,以及失败的实际语句。 再次感谢您的支持。当我输入 SELECT .. HEX .. 时,我得到这个 0000003F0000003F0000003F0000003F0000003F0000003F00,我认为我的数据没有丢失 我只有4个连接参数:主机名、登录名、密码和数据库名

以上是关于允许 MySQL 以 utf8mb4 编码存储表情符号?的主要内容,如果未能解决你的问题,请参考以下文章

mysql表情存储报错问题

微信emoji表情编码 MySQL 存储 emoji 表情符号字符集

Mysql数据库存储emoji表情

mysql支持emoji表情上传

微信昵称包含emoji表情,保存异常

怎么将emoji表情存入mysql