在Vote
模型中,有一个验证:
validates_uniqueness_of :topic_id, :scope => [:user_id]
它在开发日志中被翻译成以下SQL:
SELECT 1 AS one FROM `votes` WHERE (`votes`.`topic_id` = BINARY 2 AND `votes`.`user_id` = 1) LIMIT 1
BINARY
2(topic_id)前面哪里有a ?而且,这是什么意思?
在Vote
模型中,有一个验证:
validates_uniqueness_of :topic_id, :scope => [:user_id]
它在开发日志中被翻译成以下SQL:
SELECT 1 AS one FROM `votes` WHERE (`votes`.`topic_id` = BINARY 2 AND `votes`.`user_id` = 1) LIMIT 1
BINARY
2(topic_id)前面哪里有a ?而且,这是什么意思?
这是一种比较字节到字节而不是字符到字符的有效方法
例子
假设如果您有一个名为products
record 的数据库表,其中包含vin_number
(某个列名)的记录,其值为vin_number
say123456
现在如果你运行这个
select * from products where vin= '123456'
和
select * from products where vin = '123456 '
两者都会产生相同的结果
注意第二个选择中的空格
但是用二进制比较
select * from products where vin= BINARY '123456'
或者
select * from producst where vin = BINARY '123456 '
逐字节匹配是针对字符对字符进行的
所以第一个会导致valid
结果
和
第二个不会有结果
这里的链接将进一步帮助您