迁移至MariaDB 10.5后双字节字符插入报错,求解决方法
解决MariaDB 10.5插入双字节字符(韩文/俄文)失败的配置方案
1. 检查并统一数据库/表的字符集与排序规则
旧MySQL 5.0常使用latin1或仅支持BMP字符的旧版utf8,这会导致双字节字符插入失败。需将目标库、表统一改为utf8mb4(支持全Unicode字符,覆盖韩文、俄文等所有双字节/多字节字符):
- 查看当前数据库字符集:
SHOW CREATE DATABASE your_database_name; - 查看当前表字符集:
SHOW CREATE TABLE your_table_name; - 修改数据库默认字符集:
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;ALTER TABLE your_table_name MODIFY COLUMN your_column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 配置MariaDB全局字符集参数
编辑MariaDB配置文件(Rocky 9.1中通常为/etc/my.cnf.d/mariadb-server.cnf或/etc/my.cnf),确保全局字符集统一为utf8mb4:
- 在
[mysqld]区块添加:character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4' - 在
[client]区块添加:default-character-set = utf8mb4 - 重启MariaDB服务使配置生效:
systemctl restart mariadb
3. 确认连接会话的字符集设置
连接数据库后,执行以下命令验证会话字符集是否与全局一致:
SHOW VARIABLES LIKE '%character%'; SHOW VARIABLES LIKE '%collation%';
需确保character_set_client、character_set_connection、character_set_results、character_set_server均为utf8mb4。
若使用命令行客户端,启动时可显式指定字符集避免编码不匹配:
mysql -u your_username -p --default-character-set=utf8mb4 your_database_name
4. 迁移数据时的编码一致性
从旧MySQL 5.0导出数据时,需指定正确的字符集,避免导出过程中编码损坏:
mysqldump -u your_username -p --default-character-set=utf8mb4 your_database_name > dump.sql
导入到MariaDB时同样指定字符集:
mysql -u your_username -p --default-character-set=utf8mb4 your_database_name < dump.sql
内容的提问来源于stack exchange,提问作者Mitsuru Kido
相关产品推荐
相关产品推荐

