Ubuntu环境下MariaDB无法保存utf8mb4_unicode_ci值,如何排查?
排查步骤
1. 验证数据库连接字符集
登录MariaDB执行以下命令,确认连接相关字符集参数为utf8mb4:
SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';
重点检查character_set_client、character_set_connection、character_set_results这三个变量,必须全部为utf8mb4。如果不是,说明连接时未指定正确字符集:
- 命令行客户端连接时需加参数:
mysql --default-character-set=utf8mb4 -u 用户名 -p - 或在配置文件
/etc/mysql/mariadb.conf.d/50-client.cnf的[client]段添加:default-character-set = utf8mb4
2. 确认表及字段的实际字符集
执行命令检查表的真实配置,确保user_name字段字符集为utf8mb4_unicode_ci:
SHOW CREATE TABLE user_saver;
如果字段字符集不是utf8mb4,需重新指定字段字符集:
ALTER TABLE user_saver MODIFY COLUMN user_name varchar(254) NOT NULL CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3. 检查全局字符集配置
编辑MariaDB服务端配置文件/etc/mysql/mariadb.conf.d/50-server.cnf,在[mysqld]段添加或修改:
character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
修改后重启服务:
sudo systemctl restart mariadb
4. 修正插入语句语法
你当前的插入语句缺少列名指定,存在语法错误,正确写法应为:
INSERT INTO user_saver (user_id, user_name) VALUES (1, '𝕚𝕧𝕒𝕟ღ');
虽然语法错误通常不直接导致字符集报错,但可能引发意外的字符编码处理问题。
5. 检查系统环境编码
执行命令查看系统 locale 设置,确保为UTF-8编码:
locale
若输出中LANG、LC_ALL等不是UTF-8结尾的编码,需修改系统 locale:
sudo locale-gen en_US.UTF-8 sudo update-locale LANG=en_US.UTF-8
重启终端后重新测试插入操作。
内容的提问来源于stack exchange,提问作者KelvinCodes
相关产品推荐
相关产品推荐

