mysql 插入emoji字符的相关问题咨询

发布于 2021-11-27 15:32:53 字数 2830 浏览 893 评论 2

如下所示:

mysql> show variables like 'character%';
+--------------------------+---------------------------------------+
| Variable_name            | Value                                 |
+--------------------------+---------------------------------------+
| character_set_client     | utf8                                  |
| character_set_connection | utf8                                  |
| character_set_database   | latin1                                |
| character_set_filesystem | binary                                |
| character_set_results    | utf8                                  |
| character_set_server     | latin1                                |
| character_set_system     | utf8                                  |
| character_sets_dir       | /opt/mysql/server-5.6/share/charsets/ |
+--------------------------+---------------------------------------+
CREATE TABLE `t` (
  `data` varchar(10) CHARACTER SET utf8mb4 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

mysql> insert into t select 'U+1F600';
ERROR 1366 (HY000): Incorrect string value: 'xF0x9Fx98x80' for column 'data' at row 1

mysql> set names utf8mb4;
mysql> insert into t select 'U+1F600';
Query OK, 1 row affected (0.01 sec)

我的问题是,不是已经正确解析出是4个字节的utf8mb4字符(f0 9f 98 80)了吗?

为什么还需要显式执行set names utf8mb4, 才能成功插入呢?

另外在下面字符集环境会话中的操作,让我彻底的乱了.

mysql> show variables like 'character%';
+--------------------------+---------------------------------------+
| Variable_name            | Value                                 |
+--------------------------+---------------------------------------+
| character_set_client     | latin1                                |
| character_set_connection | latin1                                |
| character_set_database   | latin1                                |
| character_set_filesystem | binary                                |
| character_set_results    | latin1                                |
| character_set_server     | latin1                                |
| character_set_system     | utf8                                  |
| character_sets_dir       | /opt/mysql/server-5.6/share/charsets/ |
+--------------------------+---------------------------------------+

mysql> insert into t select 'U+1F600';
Query OK, 1 row affected (0.00 sec

emoji字符不是只有utf8mb4才支持吗? 怎么连latin1也支持呢? 我以为这种情况下应该是乱码啊?如??.且hex(data)应该也只有两个字节啊,如3f 3f.

求释惑!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无边思念无边月 2021-11-28 16:53:39

可有相关文档 我想看一下 谢谢!

怎言笑 2021-11-27 20:10:37

la也是支持的。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文