Moodle (3.2.2以降) のutf8mb4対応について

Moodle 3.2.2からデータベースがutf8mb4に対応するようになったそうで、utf8で運用していると以下のようなエラーが出るようになった。

そこであちこち調べてMySQLのmy.cnfに以下の記述を追加した。

[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
innodb_large_prefix = ON
innodb_file_format_max = Barracuda

これだけではだめで、既存のデータベーステーブルを全てutf8からutf8mb4に変換する必要がある。以下のようなファイルをhoge.shなどという名前で保存し、sh hoge.shで実行すると自動的にutf8mb4に変換される。your_dbname、your_dbuser、your_passwordのところは自分の環境にあわせて変更する (Yさんからスクリプトをいただきました。ありがとうございます!)。なお、このshファイル自体はutf8で保存しないとうまく動かない。

#!/bin/sh
DB="your_dbname"
USER="your_dbuser"
PASS="your_password"
(
 echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
 mysql -p$PASS -u $USER "$DB" -e "SHOW TABLES" --batch --skip-column-names \
 | xargs -I{} echo 'ALTER TABLE `'{}'` ROW_FORMAT = DYNAMIC; \
 ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; \
 ALTER TABLE `'{}'` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) \
| mysql -p$PASS -u $USER "$DB"