いよいよ 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;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です