ohh*_*hho 5 activerecord ruby-on-rails ruby-on-rails-3
在Vote模型中,有一个验证:
validates_uniqueness_of :topic_id, :scope => [:user_id]
Run Code Online (Sandbox Code Playgroud)
它被转换为开发日志中的以下SQL:
SELECT 1 AS one FROM `votes` WHERE (`votes`.`topic_id` = BINARY 2 AND `votes`.`user_id` = 1) LIMIT 1
Run Code Online (Sandbox Code Playgroud)
哪里有BINARY在2(topic_id)前?而且,这是什么意思?
这是一种比较字节到字节而不是字符到字符的有效方法
例
假设你有一个名为productsrecord 的数据库表,它有vin_number(某些列名),其值为vin_numbersay的记录123456
现在如果你跑了这个
select * from products where vin= '123456'
Run Code Online (Sandbox Code Playgroud)
和
select * from products where vin = '123456 '
Run Code Online (Sandbox Code Playgroud)
两者都会产生相同的结果
注意第二个选择中的空格
但用二进制比较
select * from products where vin= BINARY '123456'
Run Code Online (Sandbox Code Playgroud)
要么
select * from producst where vin = BINARY '123456 '
Run Code Online (Sandbox Code Playgroud)
逐字节匹配是针对字符到字符进行的
所以第一个会产生valid结果
和
第二个没有结果
这里的链接将进一步帮助您
| 归档时间: |
|
| 查看次数: |
1730 次 |
| 最近记录: |