Теперь из-за нижеприведенного явления я чувствую, что совершенно не понимаю набор символов. Сначала я думаю, что только 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 также может поддерживать символ смайликов. Я знаю, что это должно быть иллюзия, но я не знаю, как ее очистить?
SELECT LENGTH(data), CHAR_LENGTH(data) FROM t4
, чтобы увидеть, что происходит. Они должны возвращать разные значения для многобайтовых символов и одно и то же значение дляlatin1
. - person axiac   schedule 12.05.2015