在使用 MySQL 数据库时,你可能会遇到类似如下的错误提示:
nested exception is java.sql.SQLException: Incorrect string value: '\xF0\xA7\x99\x95\xE6\xB2...' for column 'xxx' at row 1"
。这通常是由于数据库字符集设置不当导致的。下面是一些解决方法。
数据库层面修改字符集
执行以下命令修改数据库的字符集为 utf8mb4
:
ALTER DATABASE [database_name] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
表层面修改字符集
执行以下命令修改表的字符集为 utf8mb4
:
ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
字段层面修改字符集
执行以下命令修改字段的字符集为 utf8mb4
:
ALTER TABLE [table_name] CHANGE [column_name] [column_name] VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
JDBC 连接字符串中指定字符集
在 JDBC 连接字符串中显式指定字符集为 utf8mb4
,例如:
jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8mb4
修改 MySQL 配置文件
找到 MySQL 的配置文件 my.cnf
或 my.ini
,修改以下字符集相关配置为 utf8mb4
:
[mysqld]
default-character-set=utf8mb4
character-set-server=utf8mb4
修改完成后,重启 MySQL 服务以使更改生效。如果问题仍未解决,建议检查应用程序代码中对字符串处理的逻辑,确保所有涉及数据库操作的地方都正确设置了字符集。同时,检查数据库中已有数据的正确性,可能存在部分数据已经损坏或不符合新的字符集要求。