No.496


【MySQL】文字コードとCOLLATEの変更

テーブル内の文字コードとCOLLATEの一括変換方法

 テーブル作成後に文字コードを変更することはまず無いかと思うが、COLLATE(文字照合順)の方は比較的よく変えることがある。

 理由は、MySQL8でCOLLATEのデフォルトが変更されているのに気が付かず運用をはじめてしまったケースが多いこと。
 デフォルトだとひらがなとカタカナを区別しなかったりするので、運用後に検索まわりでバグとして報告が来て、そこで初めて対応するというケースが非常に多い。

 まあ、過去の過ちは反省して直してしまうに限る。
 そんなわけで、各種修正の仕方をメモ。


 以下、文字コードは utf8mb4 、COLLATEは utf8mb4_ja_0900_as_cs としている。このCOLLATEはMySQLが日本語のひらがなとカタカナを区別するように作ったCOLLATEである。

MySQL 8.0: ひらがなカタカナを判別する日本語用Collation

データーベースのデフォルト変更

ALTER DATABASE DB名 CHARACTER SET 文字コード COLLATE 文字照合順;
例)
ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

各カラムごとに変更

ALTER TABLE テーブル名 MODIFY カラム名 データ種別 CHARACTER SET 文字コード COLLATE 文字照合順
例)
ALTER TABLE tabel_name MODIFY column_name text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci

テーブルの中身をまとめて変更

ALTER TABLE テーブル名 CONVERT TO CHARACTER SET 文字コード COLLATE 文字照合順;
例)
ALTER TABLE tabel_name名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;