2014-01-14 (Tue) [長年日記]
_ RailsでMySQLを使う際のcollation周りの問題について
RailsでMySQLを使う時のcollation周りの注意点のメモ。
デフォルトのcollation設定
Railsでrake db:create:allとかすると、デフォルトではcollationがutf8_unicode_ciになるが、大文字小文字や半角全角を区別しないだけならまだしも「パ」と「バ」の区別もされない。たぶん、欧米の人にはutf8_unicode_ciの方が都合がいいんだろうけど。
以下のページの手順でutf8_general_ciやutf8_binに変更しておくとよい。
validates_uniqueness_ofのcase_sensitiveオプション
以下のページで指摘されているように、validates_uniqueness_ofのcase_sensitiveオプションはデフォルトがtrueなので、大文字小文字を区別しないcollationのテーブルでもBINARYキーワード付きで大文字小文字を区別しない検索をしてしまう。
collationが*_ciの時はいちいちcase_sensitiveオプションを指定しないといけないけど、DRYじゃない。
collationを参照してデフォルトの動作を変えるプルリクエストを送ってみたけど、あまり反応がない。 RDBMSによってデフォルトの動作を変えたくないのかもしれないけど、それならデフォルトのcollationをutf8_binにするべきだ。
このあたりRailsでMySQLを使っている人は不満に思っていないのだろうか。それともHerokuの影響で今時はみんなPostgreSQLなんだろうか。