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"