在WHERE子句中确定区分大小写

时间:2011-07-31 16:05:40

标签: mysql sql sql-server-2008 oracle11g

例如,TableColumn可以包含表单NewnewNEW中的值,如何编写仅返回

的查询
SELECT * FROM myTable
WHERE myColumn = 'New'

但不会返回TableRows包含newNEW

4 个答案:

答案 0 :(得分:6)

对于MySQL,一个简单的选项是:

SELECT * FROM myTable
WHERE myColumn = 'New'
AND BINARY(myColumn) = BINARY('New');

第二个条件在逻辑上足够了,但如果表很大(myColumn上的索引不能使用),则查询会变慢。两个条件的组合允许索引用于第一个条件,然后过滤掉不匹配的大小写。

答案 1 :(得分:3)

您可以在where子句中使用COLLATE

SELECT *
FROM myTable
WHERE myColumn COLLATE latin1_general_cs = 'New'

答案 2 :(得分:1)

使这个列区分大小写的最佳方法是更改​​此特定列,如果charset是UTF8更改它的排序规则以整理utf8_bin,在修改列后搜索区分大小写。

即我有一个名为“name”的人名表。

     alter table people 
     modify column name varchar(50) charset utf8 collate utf8_bin;

注意:您可以将varchar数据类型用于varbinary,它工作正常..

答案 3 :(得分:-1)

SELECT * FROM users WHERE BINARY userid ='Rahul';
mysql不检查单词的情况所以在用户名或用户ID的情况下我们shouold需要检查案例也是为了更安全。 我希望这会对你有所帮助