照合順序をutf8_general_ciからutf8_unicode_ciへ変更する
2010年10月13日 2016年9月12日
MySQLにて照合順序(colllation)の変更をする機会があり、少し調べたので自分用メモ。
やりたいことは、utf8_general_ciになっているテーブル(&フィールド)を、utf8_unicode_ciにするということです。
簡単なことなのかもしれませんが、今まで途中から照合順序を変更したことが無かったので、なかなかいい機会となりました。
方法
テーブルの紹介順序は、下記のSQLで簡単に変更できました。
ALTER TABLE `テーブル名` COLLATE utf8_unicode_ci
が、、、しかし。すぐに気づかなかったのですが、これではフィールドの紹介順序は元のutf8_general_ciのまま変わらないんですね。
どうやら個別にフィールドも指定してやる必要があるようです。
ALTER TABLE `テーブル名` MODIFY COLUMN `フィールド名` VARCHAR(32) CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
※VARCHAR(32)部分は任意の型です。元のデータ型から変更したくない場合でも、省略したらエラーになってしまうようです。ちなみにCHARACTER SET `utf8`は、もともとutf8だったからか、私の環境では省略できました。
変更したいフィールドが多いと結構大変そうですね。
変更が発生しないように、最初から適切に設定しておくことが一番なようです。
参考-テーブル作成時に照合順序を設定する方法
ちなみに、テーブル作成時に照合順序を設定する方法は、下記です。
(UTF-8/utf8_unicode_ciの場合)
CREATE TABLE `テーブル名` ( ~テーブルの定義~ ) DEFAULT CHARSET utf8 COLLATE utf8_unicode_ci;