Rails 3.0.12(Ruby 1.8.7)でUTF文字を使用すると、Railsの一意性バリデーターで問題が発生しました。
これが私の小さなテストです:
正しい:
name = "dave"
count = User.where(:name => name).count
u = User.new(:name => name, :gender => "Male")
puts "Current: #{count} / Valid: #{u.valid?} / Errors: #{u.errors.to_a.to_sentence}"
出力:現在:1 /有効:false /エラー:名前はすでに取得されています
SQL (0.2ms) SELECT COUNT(*) FROM `users` WHERE `users`.`name` = 'dave'
SQL (0.1ms) SELECT 1 FROM `users` WHERE (`users`.`name` = BINARY 'dave') LIMIT 1
正しくない:
name = "angélique"
count = User.where(:name => name).count
u = User.new(:name => name, :gender => "Male")
puts "Current: #{count} / Valid: #{u.valid?} / Errors: #{u.errors.to_a.to_sentence}"
出力:現在:3 /有効:true /エラー:
SQL (0.1ms) SELECT COUNT(*) FROM `users` WHERE `users`.`name` = 'angélique'
SQL (0.1ms) SELECT 1 FROM `users` WHERE (`users`.`name` = BINARY 'angélique') LIMIT 1
where句は正しいエンコーディングを使用して結果を検出しているようですが、プレゼンスバリデーターのチェックでは検出されません。
これを解決する方法はありますか?