MariaDB 10.x 默认字符集为 latin1,无法满足多语言(如中文、emoji)及现代应用需求。强烈推荐使用 utf8mb4,它是 MySQL/MariaDB 对“真正 UTF-8”的实现,支持 4 字节字符(如表情符号、部分生僻汉字),是当前行业标准字符集。
sudo apt update && sudo apt upgrade -y
sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation
MariaDB 的主配置文件路径为 /etc/mysql/mariadb.conf.d/50-server.cnf(Ubuntu 默认路径),需修改 [mysqld] 部分的字符集参数:
sudo sed -i "s/^ *\(character-set-server\s*=\s*\).*/\1utf8mb4/" /etc/mysql/mariadb.conf.d/50-server.cnf
sudo sed -i "s/^ *\(collation-server\s*=\s*\).*/\1utf8mb4_unicode_ci/" /etc/mysql/mariadb.conf.d/50-server.cnf
参数说明:
character-set-server=utf8mb4:设置服务器默认字符集为 utf8mb4;collation-server=utf8mb4_unicode_ci:设置服务器默认排序规则(支持大小写不敏感、多语言排序)。修改配置后需重启服务使更改生效:
sudo systemctl restart mariadb
登录 MariaDB 命令行,执行以下命令查看全局字符集变量:
mysql -u root -p
输入密码后,运行:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
预期输出(关键变量需为 utf8mb4):
| Variable_name | Value |
|---|---|
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_server | utf8mb4 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
若已有数据库或表需修改字符集,可使用以下命令:
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;
将 your_database_name 和 your_table_name 替换为实际名称。
为避免客户端与服务器字符集不一致导致乱码,可在配置文件中添加 init_connect 参数(在 [mysqld] 部分末尾添加):
init_connect='SET NAMES utf8mb4'
重启服务后,所有新连接都会自动执行 SET NAMES utf8mb4,确保客户端使用 utf8mb4 字符集。
utf8mb4 占用更多存储空间(如 emoji 占用 4 字节),需确保服务器资源充足;bind-address 为 0.0.0.0 并配置防火墙放行 3306 端口(参考 Ubuntu MariaDB 配置要点中的远程访问配置)。