问题
当往mysql数据库中插入emoj等表情数据时,有时候会出现以下的报错,这里简要跟大家分享一下我的解决方案。
Error 1366 (HY000): Incorrect string value: '\xF0\x9F\xA4\xAD =...' for column 'content' at row 1
这里的\xF0\x9F\xA4\xAD
其实指的是我传入的emoj表情符号。
这个问题通常是因为数据库的列 content
没有被配置为接受 UTF-8
编码的字符集。因为utf8一般使用3个字节存储,但是utf8mb4采用4哥字节存储。那么解决这个方案,就需要更改字符集。
解决这个错误的方法通常包括以下几个步骤。
一、检查字符集和校对规则:
确保数据库、表以及 content
列都使用了 utf8mb4
字符集。utf8mb4
字符集能够支持更多的 Unicode
字符,包括 emoji 表情符号。
SHOW CREATE DATABASE your_database_name;
SHOW CREATE TABLE your_table_name;
SHOW FULL COLUMNS FROM your_table_name;
查看它们是不是utf8mb4,如果不是,那么就更改它们。
二、修改数据库和表的字符集(任何修改请确保先在本地debug环境操作成功后再在生产环境进行修改,防止发生故障):
修改表的字符集:
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
三、修改列的字符集:
检查列content 列的字符集不是 utf8mb4,你还需要修改它。
ALTER TABLE your_table_name MODIFY content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
TEXT 为你列的实际数据类型。
四、检查连接字符集:
确保后台接口程序连接到数据库时,也使用了 utf8mb4 字符集。在连接字符串中可能需要指定字符集,如:
jdbc:mysql://your_host:your_port/your_database?useUnicode=true&characterEncoding=UTF-8&useSSL=false
或者在你的 MySQL 配置文件中设置:
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
和/或在 client 部分设置:
default-character-set=utf8mb4
五、重启数据库服务:
有时候需要重启 MySQL 服务来确保所有的变更都生效。
按照这些步骤操作后,就不会出现emoj字符集插入失败的情况了。其他情况,欢迎交流。