2011-10-22 9 views
143

Questo è stato chiesto su questo sito in precedenza ma non sono riuscito a trovare una risposta sufficiente. Se sto facendo una query come:Query sensibile al caso MySQL

Select Seller from Table where Location = 'San Jose' 

Come posso farlo tornare solo i venditori con posizione 'San Jose' invece di 'san jose' o qualcos'altro?

+1

Utilizzare [COLLATE] (http://dev.mysql.com/doc/refman/5.0/en/charset-collate.html) –

+3

possibile duplicato di [Come posso rendere il confronto di stringhe case sensitive SQL su MySQL?] (http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql) – ks1322

+1

La risposta migliore è meglio di COLLATE, imo, perché è più semplice . –

risposta

375

Le query MySQL non sono sensibili al maiuscolo/minuscolo. Di seguito è riportata una query semplice alla ricerca di "valore". Tuttavia tornerà 'VALORE', 'valore', 'valore', ecc ...

SELECT * FROM `table` WHERE `column` = 'value' 

La buona notizia è che se avete bisogno di fare una query tra maiuscole e minuscole, è molto facile da fare utilizzando il BINARY operatore, che costringe un byte per byte confronto:

SELECT * FROM `table` WHERE BINARY `column` = 'value' 
49

per migliorare la risposta eccellente James':

E 'meglio mettere BINARY davanti alla costante invece:

SELECT * FROM `table` WHERE `column` = BINARY 'value' 

Inserire BINARY davanti a column impedirà l'utilizzo di qualsiasi indice su tale colonna.

+0

Come aggiungerlo in "LIKE"? –

+0

@Purushotamrawat è sufficiente sostituire = con LIKE ... SELECT * FROM 'table' WHERE' column' LIKE BINARY '% value%' – NVG

16

Mentre la risposta elencata è corretta, è possibile suggerire che se la colonna deve contenere stringhe maiuscole e minuscole leggere the documentation e modificare di conseguenza la definizione della tabella.

Nel mio caso questo ammontava a definire la mia colonna come:

`tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' 

Questo è a mio parere preferenziale al regolare le vostre domande.

+1

Ho modificato per correggere quello che sono abbastanza sicuro era un errore di battitura che era esattamente l'opposto di quello che volevi dire. Mi sento come se dovessi avvisarti, comunque (e dato che si tratta di un cambiamento di due caratteri, il sito non ti avviserà automaticamente). Supponendo che tu sia soddisfatto del cambiamento, sentiti libero di contrassegnare il mio commento come obsoleto e lasciare che sia messo a fuoco. (E se ho incasinato, gridare a me.) –

+1

questa dovrebbe essere la risposta accettata. – mathheadinclouds