2012-06-21 8 views
5

In un modello Vote, c'è una convalida:Perché il 'BINARY' in un'istruzione SELECT?

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

E 'tradotto al seguente SQL nel registro di sviluppo:

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

In caso di BINARY di fronte a 2 (topic_id)? E cosa significa?

risposta

7

Si tratta di un modo efficace di confronto tra byte per byte, invece di carattere a carattere

esempio

Supponiamo che se tu abbia una tabella di database chiamato products disco che ha vin_number (qualche nome di colonna) con il record con un valore di vin_number dire 123456

ora se è stato eseguito il presente

select * from products where vin= '123456' 

e

select * from products where vin = '123456 ' 

Entrambi causare lo stesso risultato

Avviso spazio nella seconda selezionare

Ma con binario confronto

select * from products where vin= BINARY '123456' 

o

select * from producst where vin = BINARY '123456 ' 

Un byte da match byte è fatto contro il personaggio a personaggio

in modo che il primo si tradurrebbe in valid risultato

e

la seconda sarebbe alcun risultato

Qui il link che ti aiuterà ulteriormente su questo

+0

Ooops, collegamento interrotto – Bustikiller