従来、MySQLおよびその派生製品では、'utf8'はutf8mb3のエイリアスとして使用されていました。utf8mb3はMySQL独自の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サーバーとDBスキーマを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. データベースのバックアップコピーを作成します!
4. データベースレベルで文字セットと照合順序を修正します:
修正後の値:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_bin |
+--------------------------+----------------------+ 5. テーブルおよびカラムレベルの文字セットと照合順序を修正するために スクリプト をロードします:
6. スクリプトを実行します:
SET @ZABBIX_DATABASE = '<your DB name>';
MariaDBの場合 → set innodb_strict_mode = OFF;
CALL zbx_convert_utf8();
MariaDBの場合 → set innodb_strict_mode = ON;
drop procedure zbx_convert_utf8;'utf8mb4'はディスク容量をわずかに多く消費することにご注意ください。
7. エラーがなければ、修正後のデータベースのバックアップコピーを作成することをお勧めします。
8. Zabbixを起動します。