报错信息:
uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F...' for column 'product_name' at row 511;
错误原因:
根据报错信息中的 \xF0\x9F\x98\x84\xF0\x9F 特征,对应UTF-8编码格式中的4字节编码,但是汉字一般不会超过3字节,会出现这种类型的报错,大概率是因为用户或者数据中,存在emoji表情,说的没错就是它了(🤔)。
解决方法
mysql5.5.3之后增加了utf8mb4类型,专门用于这种4字节的utf8编码,如果mysql版本太低则需要升级
1.如何得知自己的数据库支持那些字符集格式
mysql中执行如下语句,会输出mysql当前支持的所有字符集
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
如果value字段结果没有utf8mb4,则需要升级mysql版本到5.5.3之后
2.修改数据库,表,或者表字段的字符集格式为utf8mb4
2.1 更改表编码(推荐)
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
推荐该方法
2.2 修改mysql配置文件my.ini
不推荐该方法,会影响现有的其他表
2.3 更改数据库编码
ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
该方法会影响数据库下所有的表,慎用