在 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 / 有效:假 / 错误:名称已被占用
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 / 有效:真 / 错误:
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 子句使用了正确的编码并找到了结果,但对存在验证器的检查却没有。
有什么想法可以解决这个问题吗?