如何修改MariaDB 10.6中NVARCHAR列的默认字符集与排序规则
问题根本原因
MariaDB 10.6对NCHAR/NVARCHAR等国家字符类型的默认映射规则做了调整,默认绑定的是utf8(即utf8mb3),该规则独立于全局、库级的默认字符集配置,这是10.5和10.6版本的核心差异。
可用解决方案
- 方案1:全局永久配置
编辑MariaDB服务端配置文件(Linux下为/etc/my.cnf或/etc/mysql/mariadb.conf.d/下的配置文件,Windows下为安装目录的my.ini),在[mysqld]配置段添加以下参数:
保存后重启MariaDB服务,后续所有新建的character-set-server = utf8mb4 collation-server = utf8mb4_general_ci national_character_set = utf8mb4NVARCHAR列都会默认使用utf8mb4字符集和对应的排序规则。 - 方案2:指定库/表级字符集(无需修改全局配置)
如果没有权限修改服务端配置,可以在创建库、表时显式指定字符集,表内的NVARCHAR列会自动继承表级配置:
创建库时指定:
创建表时显式指定表级字符集:CREATE DATABASE ETLBox_DataFlow2 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;CREATE TABLE testtable ( col1 NVARCHAR(100) NULL, col2 VARCHAR(100) NULL, col3 VARCHAR(100) COLLATE 'utf8mb4_general_ci', col4 VARCHAR(100) CHARACTER SET 'utf8mb4' ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; - 方案3:会话级临时生效
仅需要当前连接生效的话,每次连接数据库后先执行以下语句即可:SET NATIONAL_CHARACTER_SET = utf8mb4;
验证方法
修改完成后执行以下查询即可确认是否生效:
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME FROM information_schema.Columns WHERE TABLE_NAME = 'testtable';
确认col1的CHARACTER_SET_NAME返回值为utf8mb4即配置生效,即可解决MySql Connector 8.0不支持utf8mb3的报错问题。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

