MySQL

2016-08-29, mysql rails

テーブルのcollationを変更する

Rails(4.2.6で確認)でMySQLのテーブルを生成すると「CHARSET=utf8 COLLATE=utf8_unicode_ci」の指定が付与されます。utf8は良いのですが、COLLATEが曲者です。カタカナやひらがな、濁点の有無などを同一のものとみなしてしまいます。たとえば、tテーブルのnameという列にユニークキーを貼っていると、以下の2行目のクエリでエラーになってしまいます。

INSERT INTO t (name) VALUES ('あ');
INSERT INTO t (name) VALUES ('ア'); -- error!!

既にテーブルが生成されている場合、ALTERクエリで変更可能です。

ALTER TABLE t COLLATE utf8_general_ci;
ALTER TABLE t MODIFY name varchar(255);

collationを明示しておけば、以降作られるテーブルのcollationはこの値にセットされます。

config/database.yml
default: &default
   adapter: mysql2
   encoding: utf8
   collation: utf8_general_ci
   :

参考URL

この記事は役に立ちましたか?