这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
SQLite是一种C语言库,它实现了一个小型,快速,自包含,高可靠性,功能齐全的SQL数据库引擎。构建在所有的手机和大多数计算机,或绑定在应用程序中。
作为一个自包含的单文件型的数据库,既能够使用SQL的语法和数据库系统的理论方便高效地管理存储数据,又能便携地随着应用移植到任何其他位置和平台,尤其在手机APP开发中应用非常广泛。SQLite目前最新版本为3.36.0。
排序规则介绍
作为关于字符集和排序规则的介绍,SQLite和PostgreSQL是唯二存在的默认排序规则(Collation)区分大小写的数据库。
SQLite比较字符串时,使用一个排序规则序列(collating sequence
)或排序规则函数。内建的函数是: BINARY, NOCASE 和 RTRIM.
- BINARY:使用的是二进制比较。
- RTRIM:和 binary 相同,不过会忽略尾部的空白字符。
- NOCASE:不区分大小写比较字符。
可以使用 sqlite3_create_collation() 注册额外的排序规则函数。
排序规则函数仅适用于比较字符串值。数字值总是比较数值大小;BLOB总是一个字节一个字节的比较。
SQLite中列的排序规则
每个表的每个列都有对应的排序规则函数。如果没有显式地定义,则默认为BINARY。
这就是为什么,SQLIte默认是区分大小写的。
可以通过COLLATE
子句指定比较和排序时的排序规则。
COLLATE
子句也可以在创建表时,定义在列上。
实际测试SQLite的排序规则
如下,进入SQLite,并创建OrderTest
表,插入数据。
CREATE TABLE OrderTest(
letter char(1) NOT NULL
);
INSERT INTO OrderTest values('B'),('b'),('A'),('a');
- 查看默认的比较结果:
sqlite> select * from OrderTest where letter='a';
a
sqlite> select * from OrderTest where letter='A';
A
- SQLite执行比较时不区分大小写:
sqlite> select * from OrderTest where letter collate nocase ='A';
A
a
- SQLite中order by子句排序,默认的结果:
sqlite> select letter from OrderTest order by letter;
A
B
a
b
- SQLite中order by子句排序时指定不区分大小写的排序规则NOCASE:
sqlite> select letter from OrderTest order by letter collate nocase;
A
a
B
b
使用upper()或lower()函数
SQLIte中同样支持 upper() 或 lower() 函数。
在进行字符串比较、排序和分组(Group by)时不区分大小写,除了排序规则的指定,还可以使用这两个函数。