2012-06-21 23 views
5

En un modelo Vote, existe una validación:¿Por qué el 'BINARY' en una instrucción SELECT?

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

Se traduce al siguiente código SQL en el registro del desarrollo:

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

Donde hay una BINARY frente a 2 (topic_id)? ¿Y que significa?

Respuesta

7

Es una forma eficaz de comparación byte a byte en lugar de un personaje a otro

ejemplo

Supongamos que si su tenga una tabla de base de datos llamado products registro que tiene vin_number (algún nombre de la columna) con el expediente con el valor de vin_number decir 123456

Ahora Si ha ejecutado el presente

select * from products where vin= '123456' 

y

select * from products where vin = '123456 ' 

Tanto dará como resultado el mismo resultado

Observe el espacio en la segunda seleccionar

Pero con el binario la comparación

select * from products where vin= BINARY '123456' 

o

select * from producst where vin = BINARY '123456 ' 

Un byte a partido de bytes se hace frente a un personaje a otro

por lo que el primero de ellos resultaría en valid resultado

y

el segundo haría ningún resultado

Aquí el link que le ayudará aún más en esto

+0

Ooops, enlace roto – Bustikiller

Cuestiones relacionadas