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 配置要點中的遠程訪問配置)。