2011-10-22 213 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