2012-06-21 48 views
5

Trong một mô hình Vote, có một xác nhận:Tại sao 'BINARY' trong câu lệnh SELECT?

validates_uniqueness_of :topic_id, :scope => [:user_id] 

Nó được phiên dịch sang các SQL sau trong nhật ký phát triển:

SELECT 1 AS one FROM `votes` WHERE (`votes`.`topic_id` = BINARY 2 AND `votes`.`user_id` = 1) LIMIT 1 

Trường hợp có một BINARY trước 2 (topic_id)? Và điều đó có nghĩa là gì?

Trả lời

7

Đó là một cách hiệu quả so sánh byte để byte thay vì nhân vật để nhân vật

dụ

Giả sử nếu bạn có một bảng cơ sở dữ liệu được gọi là products kỷ lục trong đó có vin_number (một số tên cột) với kỷ lục với giá trị của vin_number nói 123456

Bây giờ Nếu bạn chạy này

select * from products where vin= '123456' 

select * from products where vin = '123456 ' 

Cả hai sẽ dẫn đến cùng một kết quả

Thông báo không gian trong lần thứ hai chọn

Nhưng với nhị phân so sánh

select * from products where vin= BINARY '123456' 

hoặc

select * from producst where vin = BINARY '123456 ' 

Một byte bởi trận byte được thực hiện như đối với nhân vật để nhân vật

để là người đầu tiên sẽ cho kết quả trong valid kết quả

thứ hai sẽ kết quả không

đây số link sẽ giúp bạn thêm về điều này

+0

Rất tiếc, liên kết bị hỏng – Bustikiller

Các vấn đề liên quan