MySQL 区分大小写的查询
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7857669/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
MySQL case sensitive query
提问by Michael Liao
This has been asked on this site before but I couldn't find a sufficient answer. If I'm doing a query like:
以前在这个网站上有人问过这个问题,但我找不到足够的答案。如果我正在做这样的查询:
Select Seller from Table where Location = 'San Jose'
How can I make it return only Sellers with Location 'San Jose' instead of 'san jose' or something else?
我怎样才能让它只返回位置为“圣何塞”而不是“圣何塞”或其他东西的卖家?
回答by James mason
MySQL queries are not case-sensitive by default. Following is a simple query that is looking for 'value'. However it will return 'VALUE', 'value', 'VaLuE', etc…
默认情况下,MySQL 查询不区分大小写。以下是一个寻找“值”的简单查询。但是它会返回“VALUE”、“value”、“Value”等……
SELECT * FROM `table` WHERE `column` = 'value'
The good news is that if you need to make a case-sensitive query, it is very easy to do using the BINARY
operator, which forces a byte by byte comparison:
好消息是,如果您需要进行区分大小写的查询,使用BINARY
运算符非常容易,它会强制逐字节比较:
SELECT * FROM `table` WHERE BINARY `column` = 'value'
回答by Shenxian
To improve James' excellent answer:
为了改进詹姆斯的出色回答:
It's better to put BINARY
in front of the constant instead:
最好放在BINARY
常量前面:
SELECT * FROM `table` WHERE `column` = BINARY 'value'
Putting BINARY
in front of column
will prevent the use of any index on that column.
放在BINARY
前面column
将阻止在该列上使用任何索引。
回答by Thomas Clowes
Whilst the listed answer is correct, may I suggest that if your column is to hold case sensitive strings you read the documentationand alter your table definition accordingly.
虽然列出的答案是正确的,但我可以建议,如果您的列要保存区分大小写的字符串,请阅读文档并相应地更改表定义。
In my case this amounted to defining my column as:
就我而言,这相当于将我的专栏定义为:
`tag` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ''
This is in my opinion preferential to adjusting your queries.
我认为这优先于调整您的查询。