UTF-8MB4の絵文字、機種依存文字に対応する¶
SympaではUTF-8の絵文字や機種依存文字が含まれるUTF-8MB4はデフォルトでは対応しないが、DB側で対応することで
利用可能……ということになっている。
- https://www.sympa.community/manual/install/setup-database-mysql.html
MySQL/MariaDB 5.5.3 or later provides utf8mb4 character set which covers full range of Unicode including such as Chinese ideographs used for persons' names. As of Sympa-6.2a.33 r8753, both utf8 and utf8mb4 character sets are supported. To use utf8mb4 character set, you might want to replace utf8 in SQL statement above with utf8mb4.
が、上記で説明されているように下記のDB作成時の文字コードを変更するだけでは対応しない。$ mysql mysql> CREATE DATABASE sympa CHARACTER SET utf8; ←これを「utf-8mb4」にする mysql> GRANT ALL PRIVILEGES ON sympa.* TO <db_user>@<client host> -> IDENTIFIED BY '<db_passwd>'; mysql> QUIT
通常のUTF-8MB4利用手順¶
- まず前提として上記のDB作成時の文字コードはUTF-8MB4で指定する必要がります。
mysql> CREATE DATABASE sympa CHARACTER SET utf8mb4;
- 次にmariadbのサーバ、クライアント設定をutf-8mb4をデフォルトで使用するように変更します。
- /etc/my.cnf.d/mariadb-server.cnf
[mysqld] character-set-server = utf8mb4
- /etc/my.cnf.d/mysql-clients.cnf
[mysql] default-character-set = utf8mb4
- /etc/my.cnf.d/client.cnf
[client] default-character-set = utf8mb4
- /etc/my.cnf.d/mariadb-server.cnf
- サービスを再起動する
systemctl restart mariadb
- DBの文字コード設定を確認する。
# mysql -u root -p MariaDB [(none)]> show variables like '%character%'; +--------------------------+------------------------------+ | Variable_name | Value | +--------------------------+------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | ←これ以外がutf8mb4である | character_sets_dir | /usr/share/mariadb/charsets/ | +--------------------------+------------------------------+
- 通常はこれで利用可能になっているはず。
Webインタフェースで絵文字や機種依存文字を読者の名前などに当ててみる。
フォームにSubmitしたあと、対象文字が「?」に変換されずに登録出来ること。
上記だけではダメなケース¶
ここから先の手順は、Sympaの初期DB投入プログラムの改良で直っていることがあるかもしれません。
Sympaのデータベース投入プログラムが良くないのか、上記だけではダメなケースがある。
この場合は下記のように調べ、該当すると対処する必要があります。
- DBを直接変更するので、作業前に念のためsympaデータベースのバックアップを取得します。
# mysqldump -u root -p -B sympa> mysqldump.sql
- 対称DBのテーブルを調べ、各テーブルの文字コード設定を確認します。
# mysql -u root -p sympa MariaDB [sympa]> show tables; +-----------------------+ | Tables_in_sympa | +-----------------------+ | admin_table | | conf_table | | exclusion_table | | inclusion_table | | list_table | | logs_table | | netidmap_table | | notification_table | | one_time_ticket_table | | session_table | | stat_counter_table | | stat_table | | subscriber_table | | user_table | +-----------------------+ MariaDB [sympa]> show create table admin_table; | admin_table | CREATE TABLE `admin_table` ( (中略) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | ←ここがそれぞれUTF-8のまま
- 上記のようにテーブル単位の「CHARSET」「COLLATE」設定がUTF-8になっている場合があります。
この場合は正しくUTF-8MB4が扱えず、フォームSubmit時に対称文字が「?」に変換されてしまいます。 - この場合、引き続き下記のようにまずDB自体の文字コードを変更します。(念のため)
恐らく新しくテーブルを作る場合に効果があるはずです。ALTER DATABASE sympa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 次に、「テーブルごとに」次のクエリでこれらの設定を変更します。
テーブル事なので、上記の「show tables;」の結果のテーブル全てに行う必要があります。MariaDB [sympa]> ALTER TABLE admin_table CONVERT TO character SET utf8mb4 COLLATE utf8mb4_unicode_ci; ←変更 MariaDB [sympa]> show create table admin_table; ←確認 | admin_table | CREATE TABLE `admin_table` ( (中略) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | ←UTF-8MB4になっている ※これを全テーブル「admin_table」〜「user_table」まで繰り返します
- DBを抜けて、念のためサービスを再起動します。
systemctl restart mariadb systemctl restart sympa wwsympa
- Web画面から動作確認をします。
読者一覧画面でアドレスをクリックし、その読者情報設定で「名前」に機種依存文字や絵文字を入れてみると良いでしょう。
以上で設定は完了です。