いよいよ mattermost から「MySQL のサポートを打ち切るから早めに Postgres に移行するように」という指令が届きました。https://docs.mattermost.com/deploy/postgres-migration-assist-tool.html を見ながら処理を始めたところ、テーブルの collation が一部異なっているとのエラーで止まりました。
An Error Occurred: error during running unicode checks for mysql: error during running checks: Error 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
とはいえ、テーブルが 100 個ほどあるようなので、いちいち調べるわけにはいかない! ということで、MySQL でテーブル情報を引っ張ってくる命令を発行しました。
MariaDB [mattermost]> select TABLE_SCHEMA, TABLE_NAME,TABLE_COLLATION from information_schema.tables as t where t.TABLE_SCHEMA='mattermost' and t.TABLE_COLLATION like '%unicode%';
+--------------+-------------------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |
+--------------+-------------------------+-----------------+
| mattermost | NotifyAdmin | utf8_unicode_ci |
| mattermost | DesktopTokens | utf8_unicode_ci |
| mattermost | PersistentNotifications | utf8_unicode_ci |
| mattermost | PostReminders | utf8_unicode_ci |
| mattermost | RecentSearches | utf8_unicode_ci |
+--------------+-------------------------+-----------------+
5 rows in set (0.003 sec)
このくらいなら、手作業ですべて変更することにしました。これでいけるのか?(続く)
MariaDB [mattermost]> ALTER TABLE RecentSearches CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
……まだだめ。どこかで implicit に collation が定義されているフィールドがあるらしい。
10/11 アップデート:おおもとのデータベースの collation を設定するのが正解でした。これで、migration-assist
の第1ステップ終了です。
MariaDB [mattermost]> alter database mattermost character set utf8mb4 collate utf8mb4_general_ci;