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 / 有效:假 / 错误:名称已被占用

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

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

4

1 回答 1

0

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

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

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

于 2012-05-17T21:05:05.310 回答