utf8不是UTF-8,utf8mb4才是UTF-8

将emoji文字直接写入SQL中,执行 insert 语句报错;

INSERT INTO `csjdemo`.`student` (`ID`, `NAME`, `SEX`, `AGE`, `CLASS`, `GRADE`, `HOBBY`)
VALUES ('20', '陈哈哈😓', '男', '20', '181班', '9年级', '看片儿');

[Err] 1366 - Incorrect string value: '\xF0\x9F\x98\x93' for column 'NAME' at row 1

改了数据库编码、系统编码以及表字段的编码格式 →  utf8mb4 之后,就可以了:

INSERT INTO `student` (`ID`, `NAME`, `SEX`, `AGE`, `CLASS`, `GRADE`, `HOBBY`)
VALUES (null, '陈哈哈😓😓', '男', '20', '181班', '9年级', '看片儿');

 

 

 

 

在MySQL中,“utf8”编码只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。

在utf8编码中,中文是占3个字节,其他数字、英文、符号占一个字节。

但emoji符号占4个字节,一些较复杂的文字、繁体字也是4个字节。所以导致写入失败,应该改成utf8mb4。

 

 如上图中所示,这是编码改成utf8mb4后入库的数据,大家可以清晰的对比一下所占的字符数、字节数。正因如此,4字节的内容往utf8编码中插入,肯定是不行的,插不进去啊

所以说,MySQL 的“utf8mb4”才是真正的“UTF-8”

posted @ 2020-12-30 09:44  小林不会飞  阅读(471)  评论(0编辑  收藏  举报