mysql latin1也能支持中文和Emoji字符吗?


mysql中latin1怎么也能保存中文与Emoji字符呢?如下所示:


 bash


 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     | utf8mb4                               |
| character_set_system     | utf8                                  |
| character_sets_dir       | /opt/mysql/server-5.6/share/charsets/ |
+--------------------------+---------------------------------------+
mysql> show create table t4\G
*************************** 1. row ***************************
       Table: t4
Create Table: CREATE TABLE `t4` (
  `data` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
mysql> insert into t4 select '\U+1F600';
mysql> insert into t4 select '你';

因segmentfault不支持Emoji字符,只好截图了
图片描述

在我的印象中只有utf8mb4才支持Emoji字符以及中文也得需要utf8啊,怎么现在连latin1就能搞定.是我的错觉吗?

mysql

DJ.kon 10 years, 1 month ago

深入mysql字符集设置

  1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
  2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
    • 使用每个数据字段的CHARACTER SET设定值;
    • 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
    • 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
    • 若上述值不存在,则使用character_set_server设定值。
  3. 将操作结果从内部操作字符集转换为character_set_results。

这里有一篇文章: mysql utf8mb4与emoji表情

半人半灵的庭师 answered 10 years, 1 month ago

Your Answer