Debian 上 MariaDB 字符集设置建议
一 推荐方案
二 配置文件示例 Debian 路径
[client-server]
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
character-set-client-handshake = FALSE # 建议保持 FALSE,尊重客户端协商
# init_connect 可省略;若使用需确保 SUPER 权限账户不受影响
# init_connect = 'SET NAMES utf8mb4'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
三 使配置生效与验证
sudo systemctl restart mariadb
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
期望看到关键变量为:character_set_server/connection/client/results/database = utf8mb4,collation_server/connection/database = utf8mb4_unicode_ci。另:character_set_system 通常为 utf8,character_set_filesystem 为 binary,属正常表现。四 存量对象迁移与注意事项
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (
id INT PRIMARY KEY,
nick VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
character-set-client-handshake = FALSE,让服务器与客户端按能力协商;若设为 TRUE,可能强制使用服务器默认而非客户端期望的字符集。init_connect='SET NAMES utf8mb4',因为 SUPER 账户不会执行该语句,可能导致会话字符集不一致;如确需统一连接字符集,请改为在应用或专用账户级初始化,或确保 SUPER 会话也执行相同设置。