5

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

BINARY2(topic_id)前面哪里有a ?而且,这是什么意思?

4

1 回答 1

7

这是一种比较字节到字节而不是字符到字符的有效方法

例子

假设如果您有一个名为productsrecord 的数据库表,其中包含vin_number某个列名)的记录,其值为vin_numbersay123456

现在如果你运行这个

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结果

第二个不会有结果

这里的链接将进一步帮助您

于 2012-06-21T14:25:00.610 回答