Rails唯一性=>真正的编码问题

时间:2012-05-16 15:36:41

标签: ruby-on-rails ruby ruby-on-rails-3

在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子句使用正确的编码并查找结果,但是对存在验证器的检查却没有。

我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我认为您的应用可能使用的是UTF-8,但您的数据库不是:

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

该指南包含在页面前面为MySQL和PostgreSQL执行此操作的示例。