为什么SELECT语句中的'BINARY'?

时间:2012-06-21 07:13:36

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

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

在2(topic_id)前面有BINARY的位置?这是什么意思?

1 个答案:

答案 0 :(得分:7)

这是一种比较字节到字节而不是字符到字符

的有效方法

示例

假设您有一个名为products记录的数据库表,其中vin_number某些列名称)的记录值为vin_number说{{1 }}

现在如果你运行了这个

123456

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

第二个无结果

此处link将进一步为您提供帮助