历史上,MySQL及其衍生版本使用'utf8'作为alias表示utf8mb3——这是MySQL自身对标准UTF8的3字节实现(标准UTF8为4字节)。 从MySQL 8.0.28和mariadb 10.6.1开始,'utf8mb3'字符集已被弃用,未来某个版本将停止支持,而'utf8'将成为'utf8mb4'的别名。 自Zabbix 6.0起支持'utf8mb4'。为避免未来出现问题,强烈建议使用'utf8mb4'。 切换到'utf8mb4'的另一个优势是支持补充Unicode字符。
由于Zabbix 6.0之前的版本不支持utf8mb4,请确保在执行utf8mb4转换前先将Zabbix server和数据库架构升级至6.0.x版本。
1. 检查数据库字符集和排序规则。
例如:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin2 | latin2 _general_ci |
+--------------------------+----------------------+
或:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8 | utf8_bin |
+--------------------------+----------------------+
如上所示,当前字符集并非'utf8mb4'且排序规则不是'utf8mb4_bin',因此需要进行修正。
2. 停止Zabbix服务。
3. 创建数据库备份copy!
4. 在数据库层级修正字符集和排序规则:
修正后的值:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_bin |
+--------------------------+----------------------+
5. 加载 script 以在表和列层级修正字符集及排序规则:
6. 执行脚本:
SET @ZABBIX_DATABASE = '<your DB name>';
If MariaDB → set innodb_strict_mode = OFF;
CALL zbx_convert_utf8();
If MariaDB → set innodb_strict_mode = ON;
drop procedure zbx_convert_utf8;
请注意'utf8mb4'预计会占用稍多的磁盘空间。
7. 若无错误发生——建议create修正后的数据库备份copy。
8. 启动Zabbix。