问题
当往mysql数据库中插入emoj等表情数据时,有时候会出现以下的报错,这里简要跟大家分享一下我的解决方案。
Error 1366 (HY000): Incorrect string value: 'xF0x9FxA4xAD =…' for column 'content' at row 1
这里的xF0x9FxA4xAD其实指的是我传入的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字符集插入失败的情况了。其他情况,欢迎交流。
原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/314.html