2

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句は正しいエンコーディングを使用して結果を検出しているようですが、プレゼンスバリデーターのチェックでは検出されません。

これを解決する方法はありますか?

4

1 に答える 1

0

あなたのアプリは UTF-8 を使用している可能性が高いと思いますが、DB はそうではありません:

http://guides.rubyonrails.org/getting_started.html#configuration-gotchas

このガイドには、ページの前半で MySQL と PostgreSQL に対してこれを行う例が含​​まれています。

于 2012-05-17T21:05:05.310 に答える