使用MySQL的频率较低,今天就遇到这么一个报错:

General error: 1366 Incorrect string value: 'xF0x9Fx91x87<p...' for column 'content' at row 1

查了以下,是MySQL存储汉字用了utf8,我看了一下库,是utf8,而且也是推荐的mb4,但是表的排序,默认是:utf8mb3_general_ci


这就很离谱,于是改了一下表的排序字符集为:utf8mb4_unicode_ci


phpmyadmin可以直接改,也可以使用语句:


ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

改了后,报错变化,报错变为:


[10501]SQLSTATE[HY000]: General error: 3988 Conversion from collation utf8mb3_general_ci into utf8mb4_bin impossible for parameter

就很无语。应该是没有set names吧


然后在服务端改了一下配置


在my.cnf的mysqld节点加入了以下配置代码:

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

重启数据库后,就正常了。