数据库区分大小写查询 & sqlite不区分大小写查询
默认情况下,SQL Server不区分大小写,假设数据表test的name字段中有数据“abcd”和“Abcd”,如果使用查询语句:select * from test where name like 'a%',则查询的结果会把上面的两条数据都查询出来,这一点上和Oracle有区别.
可以通过设置排序规则使其区分大小写,分别为:创建数据库,修改数据库,创建表的字符型列时指定排序规则来实现
eg:
1.创建数据库区分大小写
create database test collate Chinese_PRC_CS_AS
2.修改数据库区分大小写
alter database test collate Chinese_PRC_CS_AS
3.创建表区分大小写
create table test(tid in primary key, name varchar(20 collate Chinese_PRC_CS_AS))
大部分数据库在进行字符串比较的时候,对大小写是不敏感的,但是,在SQLite中,对大小写是敏感的。
有表test如下:
id | name |
1 | ABCDE |
2 | abcde |
3 | ABcde |
4 | abCDE |
5 | aaaaa |
6 | bbbbb |
执行下面sql语句
select * from test where name = 'abCDE';
结果是没有查询到任何记录(sqlite在进行字符串查询的时候,默认是区分大小写)
区分大小写的三种解决方案
一:使用大小写转换函数LOWER,UPPER
eg:select * from test where LOWER(name) = 'abcde';
二:在进行比较时强制声明不区分大小写
select * from test where name = 'abcde' collate nocase;
三:创建表时声明该字段不区分大小写
create table test (id integer, name text collate nocase)
注:
(1)不推荐使用方案一,有额外的性能消耗
(2)如果只是少量查询不需要区分大小写,建议使用方案二
(3)在任何情况下都不需要区分大小写,方案三完美献身