maeshimaの日記

メモ書きです

case_sensitiveで大文字と小文字を区別・・・できない

validates_uniquenessのオプションである:case_sensitiveはデフォルトfalse(大文字小文字を区別しない)true(2.2.0より)。かといってtrueにしても、mysqlを使用している場合は区別されないらしい。(mysqlは大文字小文字を区別せず保存する仕様なので。)


今のところ区別する必要はないからいいんだけど、必要になった場合はどのように上記の問題を回避したらいいんだろ?

追記

migrationに下記のように書いて、binary型に変更してあげるとよい

execute("ALTER TABLE users MODIFY login varchar(255) BINARY NOT NULL")

さらに追記

rails2.3.4, mysql5.0.77で試したらなぜか特に設定せずとも:case_sensitive => trueが効いた!
rails, mysqlのどっちかの仕様が変わった模様

さらにさらに追記

railsが、:case_sensitive => trueにしてるときは

SELECT `users`.id FROM `users` WHERE (`users`.`name` = BINARY 'HOGE')

のようにBINARYをつけて、大文字小文字を区別させるようにしている。バージョンいくつからこうなったんだろう?