SQLite 大小写敏感
--转自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 大小写敏感的更多相关文章
- Android免坑指南(一)Sugar与SQLite
最近在Android手机开发中使用了ORM框架Sugar1.4,节省了大量代码,同时也遇到不少麻烦,记录如下: 1. 使用group by将查询结果转换为POJO对象 在Sugar1.4中,可以使用如 ...
- sqlite查询问题,由字母大小写敏感引起
目前做的项目之前是用mysql,这是个错误的选择,因为本身并不是服务器-客户端模式的项目,而是一个CS架构项目,mysql这种需要较繁复配置的数据库并不合适.需要的应该是sqlite这类,内嵌的数据库 ...
- [PHP] Laravel 体现 MySQL、Sqlite 数据的大小写敏感
要想实现数据比对的大小写敏感,方式是设置数据库字段类型 或者 字段校验字符集. MySQL 和 Sqlite 所支持的 collations 形式是不同的,你可以通过以下文档了解到. MySQL co ...
- SQLite的基本使用
SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基 ...
- SQL for SQLite
语法 verb + subject + predicate commannds(命令) SQL由命令组成,以分号为结束.命令有token组成,token由white space分隔,包括空格.tab. ...
- 学习SQLite之路(二)
下面就是真正关于数据库的一些知识了: 20160614更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite创建表: 基本 ...
- SQLite常用点滴总结(转)
expressionexpr ::= expr binary-op expr |expr [NOT] like-op expr [ESCAPE expr] |unary-op expr |( ...
- Android SQLite (四 ) 全面详解(二)
SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何 ...
- Android SQLite (三 ) 全面详解(一)
官网 SQLite是一款轻型的数据库,是关系型数据库(RDBMS)管理系统,它包含在一个相对小的C库中.目前在很多嵌入式产品中使用了它,它占用资源非常 的低,在嵌入式设备中,可能只需要几百K的内存就够 ...
随机推荐
- MySQL参数log_bin_trust_function_creators
问题:执行创建函数的sql文件报错如下: [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ...
- 解决eclipse Building workspace(Sleeping)闪烁
出现这个是因为我,把两个有错的项目.从工程里面删除掉之后,再接着运行新的工程,但是Building workspace一直没有执行完毕,导致新的工程无法运行. 这个时候可以关闭自动编译,就可以运行新的 ...
- 老程序员解Bug的通用套路
千万不要当程序员面说有bug 对于新手程序员而言,在复杂代码中找BUG是一个难点.下面我们总结下老从程序员解Bug的通用套路,希望对大家有帮助. 1.IDE调试 根据项目特点和语言特点选择一个最合适的 ...
- scrapy中通过set()方法进行数据过滤去重
我们经常在抓取数据是碰到 数据重复的问题,除了radis数据库去重功能外,还有一种简便的过滤方法, 来来 我们直接上代码: pipelines.py中: from scrapy.exceptions ...
- 犯得错误QAQ
1.十年OI一场空,不开longlong见祖宗(丢过150分) 2.计算完了再开数组,开的足足的.不要少开0:(丢过一共200分) 3.最大值,最小值一定开成7个f.(丢了20分). 4.freope ...
- webpack(二)解析es6并打包
一.前言 ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器对ES6新特性支持度不高,所以要想在浏览器中直接使用ES6的新特性就得借助别的工具来实现.Babel是一个广泛使用的转码器, ...
- Tomcat 配置文件的解析
转载:https://www.cnblogs.com/sunshine-1/p/8990044.html https://www.cnblogs.com/kismetv/p/7228274.html ...
- 01、前端需要注意哪些SEO?
1.前端需要注意哪些SEO? 1)设置网站TDK标签的设置 2)图片img标签必须加上alt属性 3)h1~h6标签合理使用 4)a标签增加rel="nofollow" 5) 安装 ...
- React应用程序设计过程中如何区分模块到底是state还是props?
根据官方文档,满足以下任意条件的模块,就不是State,原文如下: 1.Is it passed in from a parent via props? If so, it probably isn’ ...
- LOJ6503. 「雅礼集训 2018 Day4」Magic(容斥原理+NTT)
题目链接 https://loj.ac/problem/6503 题解 题中要求本质不同的序列数量,不太好搞.我们考虑给相同颜色的牌加上编号,这样所有牌都不相同.那么如果我们求出了答案,只需要将答案除 ...