使用的mysql5.7版本
默认存储引擎:InnoDB
例子:
深圳市福田区福华路318号福?苑
深圳市福田区福华路318号福鑫苑
?
11011000010000011101110011111110
鑫
1001010001101011
create table test
(
str varchar(100),
str2 text
)
字符串为Emoj表情内容,还有一些生僻字,每个字符占用4个字节,在Mysql中默认最大支持3个字节,超长了,所以报错了。
insert into test(str2) values('深圳市福田区福华路318号福?苑15D')
> 1366 - Incorrect string value: '\xF0\xA0\x93\xBE\xE8\x8B...' for column 'str2' at row 1
> 时间: 0s
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。
好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
在utf8mb4字符集下,字符串的char类型会多消耗一些空间,根据 Mysql官方建议,使用varchar代替char类型。
Emoji是一种特殊的Unicode编码,常见于ios和 android 手机上,和一些不常用的汉字,以及任何新增的 Unicode 字符等等
如果版本支持(MySQL5.5.3及以上),为了获得更好的兼容性,建议使用utf8mb4字符集。
结论:
常规管理系统,使用utf8字符集即可,节约空间。
但如果数据来自移动端,有兼容性要求的。强烈建议使用utf8mb4字符集。