现在因为下面的现象,我觉得自己完全不懂字符集。一开始我以为只有utf8mb4支持Emoji字符,如:😀.见下面。
As of MySQL 5.5.3, the utf8mb4 character set uses a maximum of four bytes per character supports supplemental characters
但我无意中发现了这个现象,见下图。
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> select * from t4;
+------+
| data |
+------+
| 😀 |
+------+
现在我很疑惑,好像latin1也可以支持表情符号,我知道这一定是错觉。我知道这一定是一种错觉,但是我不知道怎么清除?
你不能存储除了 ISO-8859-1字符 变成latin1字段,而不将其转换为例如base64。
可能会成功,但以后会在某些时候失败。在特殊的拥有多字节字符,如表情符号。