Mysql插入varchar字段报错

报错信息:

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;

该方法会影响数据库下所有的表,慎用

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×