MySQL中的utf8和utf8mb4区别

1.一般来说MySQL(小于5.5.3)字符集设置为utf8,指定连接的字符集也为utf8,django中save unicode string是木有问题的。但是,当字符串中有特殊字符(如emoji表情符号,以及其他凡是转成utf8要占用4字节的字符),就会有问题,会报错:

Incorrect string value: ‘xF0x9Fx91x93xF0x9F…’ for column ‘xxx’ at row 1

MySQL中的utf8最大3个字节,能够支持的字符集比较少,而实际上的utf8最多支持4个字节,例如数字、英文、符号占一个字节,中文占3个字节,繁体字和表情占4个字节,因此在用MySQL的utf8去存的时候会出现问题。

mysql> show character set;

解决办法:

1. MySQL < 5.5.3:把字段改为MEDIUMBLOB(数据库中的字段), 其它不用修改。

2.MySQL >= 5.5.3:修改配准文件my.ini/mydefault.ini

[client] #客服端设置,即客服端默认的连接参数 default-character-set = utf8mb4 #编码 [mysql] default-character-set = utf8mb4 [mysqld] #服务端基本设置 character-set-client-handshake = FALSE character-set-server = utf8mb4 #服务端默认编码(数据库级别) collation-server = utf8mb4_unicode_ci #服务端默认排序规则 init_connect=SET NAMES utf8mb4

重启MySQL:

mysql>net stop mysql;

mysql>net start mysql;

mysql> SHOW VARIABLES WHERE Variable_name LIKE character\_set\_% OR Variable_name LIKE collation%;

+--------------------------+--------------------+ | Variable_name | Value | +--------------------------+--------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +--------------------------+--------------------+

参考:

经验分享 程序员 微信小程序 职场和发展