por exemplo, com a tabela:
create table test (id int primary key, tags json);
insert into test (id, tags) values (1, '["Lorem ipsum", "dolor", "sit"]'), (2, '["foo", "bar"]');
Isso vai corresponder:
select id from test where json_search(tags, 'one', 'Lorem%') is not null
Mas isso não vai:
select id from test where json_search(tags, 'one', 'lorem%') is not null
Idealmente, eu gostaria de poder combinar os dois casos.
Executando no cluster Percona XtraDB 5.7.16
Outro caso, quando você não pode alterar os dados e deve ter resultado adequado:
será mais lento, é claro, então precisa testar em tamanho real de dados
Esse problema está relacionado ao valor de pesquisa não ser um conjunto de caracteres _ci. Json_search() permite pesquisas que não diferenciam maiúsculas de minúsculas, desde que seu agrupamento de tabela de dados seja _ci e seu parâmetro de pesquisa também seja _ci.
Para resolver isso em um procedimento armazenado usando a instrução preparada, tive que fazer o seguinte
Veja a explicação da documentação em json_Search se precisar aprender mais sobre os parâmetros em json_search.
Observe que o ? dentro da Select-Query está o parâmetro da instrução preparada usando o parâmetro @searchValue.
Documento do MySQL - json_search()
Documento do MySQL - Agrupamento
Isso é mais eficiente do que fazer uma conversão lower() ou upper() e, como notei, você não pode especificar uma chave para pesquisar se usar lower() ou upper().
Isso pode ser devido ao agrupamento usado pela tabela ou pelo campo. Se fizer distinção entre maiúsculas e minúsculas, "L" não corresponderá a "l". Para saber o agrupamento, execute isso por favor:
SHOW CREATE TABLE test
Os nomes de agrupamento que não diferenciam maiúsculas de minúsculas terminam com "_ci". Clique aqui para obter mais informações sobre Collations .