在rails 3.0.12(Ruby 1.8.7)中使用UTF字符时,我遇到了rails uniqueness validator的问题。
这是我的小测试:
正确:
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 /有效:真/错误:
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子句使用正确的编码并查找结果,但是对存在验证器的检查却没有。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:0)
我认为您的应用可能使用的是UTF-8,但您的数据库不是:
http://guides.rubyonrails.org/getting_started.html#configuration-gotchas
该指南包含在页面前面为MySQL和PostgreSQL执行此操作的示例。