2011-10-22 447 views
143

之前已經詢問過這個網站,但是我找不到足夠的答案。如果我做這樣的查詢:MySQL區分大小寫的查詢

Select Seller from Table where Location = 'San Jose' 

我怎樣才能使它返回與位置「聖何塞」只有賣方而不是「聖何塞」或者別的什麼?

+1

使用[COLLATE](http://dev.mysql.com/doc/refman/5.0/en/charset-collat​​e.html) –

+3

可能重複[如何在MySQL上對SQL區分大小寫的字符串進行比較?] (http://stackoverflow.com/questions/5629111/how-can-i-make-sql-case-sensitive-string-comparison-on-mysql) – ks1322

+1

最佳答案比COLLATE,imo更好,因爲它更簡單。 –

回答

375

默認情況下,MySQL查詢不區分大小寫。以下是一個查找「值」的簡單查詢。然而,它會返回「VALUE」,「價值」,「價值」,等等......

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

好消息是,如果你需要做一個區分大小寫的查詢,這是非常容易使用BINARY做運營商,它通過字節比較迫使一個字節:

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

爲了改善詹姆斯的出色答卷:

這是更好地把BINARY在不斷的前面,而不是:

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

BINARY放在column之前將防止在該列上使用任何索引。

+0

如何將它添加到「LIKE」? –

+0

@Purushotamrawat只是替換= LIKE ... SELECT * FROM'table' WHERE'column' LIKE BINARY'%value%' – NVG

16

雖然列出的答案是正確的,我可能會建議,如果您的專欄要保存區分大小寫的字符串,請閱讀the documentation並相應地更改您的表定義。

在我而言這等於定義我的列:

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

這是在我看來,優惠到調整查詢。

+1

我編輯修復了我很確定的一個愚蠢的錯字,恰恰相反你想說什麼。不過,我覺得我應該通知你(因爲這是一個雙字符變化,站點不會自動通知你)。假設你對這個改變感到滿意,隨時可以將我的評論標記爲過時,並讓它變成粉碎。 (如果我搞砸了,吼我。) –

+1

這應該是被接受的答案。 – mathheadinclouds