--转自mojianpo  http://mojianpo.iteye.com/blog/1496579

大部分数据库在进行字符串比较的时候,对大小写是不敏感的。 
但是,在SQLite中,对大小写是敏感的。

假设表Test的结构和值如下:

_id  name
1 ABCDE
2 abcde
3 ABCde
4 abCDE
5 aaaaa
6 bbbbb

执行下面的SQL语句:

select * from test where name = 'Abcde';

结果是没有查询到任何记录。

明显地,SQLite在进行字符串比较的时候,默认对大小写是敏感的

那么SQLite怎么区分大小写查询呢,以下是三种解决方案:

方案一:使用大小写转换函数LOWER、UPPER

1.select * from test where LOWER(name) = 'abcde';

2.select * from test where LOWER(name) = LOWER('ABCDE');

3.select * from test where LOWER(name) = LOWER('Abcde');

4.select * from test where LOWER(name) = LOWER('ABCde');

....

(1).select * from test where UPPER(name) = 'ABCDE';

(2).select * from test where UPPER(name) = UPPER('ABCDE');

(3).select * from test where UPPER(name) = UPPER('Abcde');

(4).select * from test where UPPER(name) = UPPER('ABCde');

.....

查询到的记录都如下:

1 ABCDE
2 abcde
3 ABCde
4 abCDE

方案二:在进行比较时强制声明不区分大小写

select * from test where name = 'ABCDE' COLLATE NOCASE;

查询到的记录如下:

1 ABCDE
2 abcde
3 ABCde
4 abCDE

方案三:创建表时声明该字段不区分大小写

create table test (_id Integer,name Text COLLATE NOCASE );

如果在任何情况下都不需要对大小写敏感,方案三是最好的解决方案;

如果只是少量查询对大小写不敏感,可以用方案二。

而方案一由于用到了函数,可能有额外的性能消耗,不推荐使用

SQLite 大小写敏感的更多相关文章

  1. Android免坑指南(一)Sugar与SQLite

    最近在Android手机开发中使用了ORM框架Sugar1.4,节省了大量代码,同时也遇到不少麻烦,记录如下: 1. 使用group by将查询结果转换为POJO对象 在Sugar1.4中,可以使用如 ...

  2. sqlite查询问题,由字母大小写敏感引起

    目前做的项目之前是用mysql,这是个错误的选择,因为本身并不是服务器-客户端模式的项目,而是一个CS架构项目,mysql这种需要较繁复配置的数据库并不合适.需要的应该是sqlite这类,内嵌的数据库 ...

  3. [PHP] Laravel 体现 MySQL、Sqlite 数据的大小写敏感

    要想实现数据比对的大小写敏感,方式是设置数据库字段类型 或者 字段校验字符集. MySQL 和 Sqlite 所支持的 collations 形式是不同的,你可以通过以下文档了解到. MySQL co ...

  4. SQLite的基本使用

    SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基 ...

  5. SQL for SQLite

    语法 verb + subject + predicate commannds(命令) SQL由命令组成,以分号为结束.命令有token组成,token由white space分隔,包括空格.tab. ...

  6. 学习SQLite之路(二)

    下面就是真正关于数据库的一些知识了: 20160614更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite创建表: 基本 ...

  7. SQLite常用点滴总结(转)

    expressionexpr ::=     expr binary-op expr |expr [NOT] like-op expr [ESCAPE expr] |unary-op expr |( ...

  8. Android SQLite (四 ) 全面详解(二)

    SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何 ...

  9. Android SQLite (三 ) 全面详解(一)

    官网 SQLite是一款轻型的数据库,是关系型数据库(RDBMS)管理系统,它包含在一个相对小的C库中.目前在很多嵌入式产品中使用了它,它占用资源非常 的低,在嵌入式设备中,可能只需要几百K的内存就够 ...

随机推荐

  1. vs2015+opencv3.3.1 +Eigen 3.3.4 c++实现 薄膜插值 泊松图像编辑(v=0||Δf=0)

    #include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/i ...

  2. 【03】循序渐进学 docker:基础命令

    写在前面的话 之前谈了啥是 docker 和怎么安装 docker,这里就谈谈 docker 命令的使用,当然,这里的使用可能只是局限于 docker 的增删查改. 另外需要注意的是,为了图片的美观, ...

  3. Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!

    当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...

  4. [转] Draw Call未被批处理?告诉你在Unity 5.6中如何查找原因 [复制链接]

    Unity在5.6之前的版本中并未提供很直接的方式来查找Draw Call未被批处理的原因,但Unity 5.6在Frame Debugger中新增了一项功能,帮助开发者查找相关信息.今天这篇文章就为 ...

  5. nginx理解与配置

    准备: http服务器:①tomcat②apache③nginx(c语言开发) 文件系统:①mgfs ②mgbd:存储小文件 ③fastDFS:存储大文件.小文件,分布式文件系统 nginx是一种ht ...

  6. (转)使用vs调试的时候,如何知道程序阻塞在哪里?

    遇到一个问题,加了两个断点当运行到断点A后,我释放掉了,理想状态应该是在断点B停住,但并没有,程序感觉就像是阻塞了一样请问,这种状况如何知道程序当前是在哪里阻塞着? 回复: 可以让调试器停住,然后在调 ...

  7. win10在CMD操作MySQL时中文显示乱码

    根据网上说明直接修改数据库各种的字符集没有效果,后来经过测试发现需要先更换至旧版CMD才行. 具体总流程如下: 1.在边框栏上右键,打开属性栏. 2.选择“使用旧版控制台” 3.重启CMD,并设置字符 ...

  8. SpringBoot设置默认启动页的2种方式

    方式一: 继承WebMvcConfigurerAdapter,重写addViewControllers. @Configurationpublic class WebConfigurer extend ...

  9. springcloud微服务总结二 注册中心

    一:netflix和springcloud关系 netflix公司开源了很多组件,包括服务注册与发现(Netflix Eureka).断路器(Netflix Hystrix).负载均衡(Netflix ...

  10. ABP项目后台初始化数据库

    设置host为启动项,并修改连接字符串 在程序包管理控制台中,默认项目选中EFCore 执行Update-Database命令