Vous pouvez utiliser COLLATE NOCASE
dans votre SELECT
requête :
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
De plus, en SQLite, vous pouvez indiquer qu'une colonne doit être insensible à la casse lorsque vous créez la table en spécifiant collate nocase
dans la définition de la colonne (les autres options sont binary
(par défaut) et rtrim
; voir aquí ). Vous pouvez spécifier collate nocase
lorsque vous créez un index. Par exemple :
create table Test
(
Text\_Value text collate nocase
);
insert into Test values ('A');
insert into Test values ('b');
insert into Test values ('C');
create index Test\_Text\_Value\_Index
on Test (Text\_Value collate nocase);
Expressions impliquant Test.Text_Value
devraient maintenant être insensibles à la casse. Par exemple :
sqlite> select Text\_Value from Test where Text\_Value = 'B';
Text\_Value
----------------
b
sqlite> select Text\_Value from Test order by Text\_Value;
Text\_Value
----------------
A
b
C
sqlite> select Text\_Value from Test order by Text\_Value desc;
Text\_Value
----------------
C
b
A
L'optimiseur peut aussi potentiellement utiliser l'index pour la recherche et la correspondance insensible à la casse sur la colonne. Vous pouvez le vérifier en utilisant la fonction explain
Commande SQL, par exemple :
sqlite> explain select Text\_Value from Test where Text\_Value = 'b';
addr opcode p1 p2 p3
---------------- -------------- ---------- ---------- ---------------------------------
0 Goto 0 16
1 Integer 0 0
2 OpenRead 1 3 keyinfo(1,NOCASE)
3 SetNumColumns 1 2
4 String8 0 0 b
5 IsNull -1 14
6 MakeRecord 1 0 a
7 MemStore 0 0
8 MoveGe 1 14
9 MemLoad 0 0
10 IdxGE 1 14 +
11 Column 1 0
12 Callback 1 0
13 Next 1 9
14 Close 1 0
15 Halt 0 0
16 Transaction 0 0
17 VerifyCookie 0 4
18 Goto 0 1
19 Noop 0 0