gpt4 book ai didi

mysql - 为什么执行set names utf8mb4后,列名变成问号?

转载 作者:行者123 更新时间:2023-11-29 22:28:40 24 4
gpt4 key购买 nike

为什么执行set names utf8mb4后,列名变成问号?见下文:

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/ |
+--------------------------+---------------------------------------+
mysql> select '\U+1F600';
+------+
| 😀 |
+------+
| 😀 |
+------+
mysql> set names utf8mb4;
mysql> select '\U+1F600';
+------+
| ? |
+------+
| 😀 |
+------+

在我看来,utf8mb4 就是为了支持这些表情符号而设计的。为什么改成utf8mb4,列名改成问号?

此外,我从网站( http://getemoji.com/ )复制了表情符号字符,然后将其粘贴到终端中。如果我只是手动输入 '\U+1F600' 。见下文:

mysql> select '\U+1F600' ;
+---------+
| U+1F600 |
+---------+
| U+1F600 |
+---------+

所以我想当我将它粘贴到终端时,隐含地发生了一些事情。这种隐式转换(😀 --> '\U+1F600')也许可以解释这种现象。

最佳答案

根据 MySQL 文档,这似乎是预期的行为,其中元数据被声明为存储在 utf8(非 4 字节版本)中。

它作为character_set_result (utf8mb4)返回给客户端,但是很可能您的虚拟列名称存储在utf8中,以便与所有其他元数据兼容和比较,因此字符的4字节部分会丢失,即使它不在真实的表中。

看这里: https://dev.mysql.com/doc/refman/5.6/en/charset-metadata.html

关于mysql - 为什么执行set names utf8mb4后,列名变成问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30022411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com