Você pode usar COLLATE NOCASE
em sua SELECT
consulta:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Além disso, no SQLite, você pode indicar que uma coluna não diferencia maiúsculas de minúsculas ao criar a tabela, especificando collate nocase
na definição da coluna (as outras opções são binary
(o padrão) e rtrim
; veja aqui ). Você também pode especificar collate nocase
quando criar um índice. Por exemplo:
criar tabela Teste
(
Text_Value texto agrupar nocase
);
insira nos valores de teste ('A');
insira nos valores de teste ('b');
inserir nos valores de teste ('C');
criar índice Test_Text_Value_Index
em teste (Text_Value agrupa nocase);
Expressões envolvendo Test.Text_Value
agora não diferenciam maiúsculas de minúsculas. Por exemplo:
sqlite> selecione Text_Value em Test, em que Text_Value = 'B';
Text_Value
----------------
b
sqlite> selecione Text_Value na ordem de teste por Text_Value;
Text_Value
----------------
UMA
b
C
sqlite> selecione Text_Value na ordem de teste por Text_Value desc;
Text_Value
----------------
C
b
UMA
O otimizador também pode potencialmente usar o índice para pesquisa e correspondência que não diferenciam maiúsculas de minúsculas na coluna. Você pode verificar isso usando o explain
comando SQL, por exemplo:
sqlite> explica selecione Text_Value em Test, em que Text_Value = 'b';
addr opcode p1 p2 p3
---------------- -------------- ---------- ---------- ---------------------------------
0 Saltar 0 16
1 Inteiro 0 0
2 OpenRead 1 3 keyinfo (1, NOCASE)
3 SetNumColumns 1 2
4 Cordas8 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 Coluna 1 0
12 Retorno de chamada 1 0
13 Próximo 1 9
14 Fechar 1 0
15 Parada 0 0
16 Transação 0 0
17 VerifyCookie 0 4
18 Saltar 0 1
19 Noop 0 0