允许 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
collation_connection:utf8mb4_unicode_ci
collation_database : utf8mb4_unicode_ci
collation_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 编码存储表情符号?的主要内容,如果未能解决你的问题,请参考以下文章