Olhei em volta e não encontrei o que estava procurando, então aqui vai.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Isso funciona bem, mas não se a árvore for denominada Elm ou ELM, etc.
Como faço para não fazer distinção entre maiúsculas e minúsculas SQL para esta pesquisa de caracteres curinga?
Estou usando o MySQL 5 e o Apache.
mysql
sql
sql-like
case-insensitive
David Morrow
fonte
fonte
BINARY
como aqui: stackoverflow.com/questions/7857669/...like
deve diferenciar maiúsculas de minúsculas por padrão.Respostas:
Na verdade, se você adicionar
COLLATE UTF8_GENERAL_CI
à definição da sua coluna, poderá omitir todos esses truques: ele funcionará automaticamente.Isso também reconstruirá quaisquer índices nessa coluna para que eles possam ser usados para as consultas sem levar '%'
fonte
COLLATE UTF8_GENERAL_CI
à definição da sua coluna, poderá omitir todos esses truques: ele funcionará automaticamente.ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
. Isso também reconstruirá quaisquer índices nesta coluna para que eles possam ser usados para as consultas sem levar '%'.Eu sempre resolvi isso usando menor:
fonte
A distinção entre maiúsculas e minúsculas é definida nas configurações de agrupamento de colunas / tabelas / banco de dados. Você pode fazer a consulta em um agrupamento específico da seguinte maneira:
por exemplo.
(Substitua
utf8_general_ci
por qualquer agrupamento que achar útil). A_ci
sigla não faz distinção entre maiúsculas e minúsculas .fonte
utf8_general_ci
funciona bem, no entanto.COLLATE
ou fazer um truque simples como este (LOWER()
ambas as cordas antes de comparação)SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
Este é o exemplo de uma consulta LIKE simples:
Agora, sem distinção entre maiúsculas e minúsculas usando a função LOWER ():
fonte
COLLATE
questões de formatoBasta usar:
Ou use
Ambas as funções funcionam da mesma maneira
fonte
Eu estou fazendo algo assim.
Obter os valores em minúsculas e MySQL faz o resto
E para o MySQL PDO Alternative:
fonte
Eu acho que essa consulta fará uma pesquisa sem distinção entre maiúsculas e minúsculas:
fonte
usar
ILIKE
funcionou para mim !!
fonte
Você não precisa de
ALTER
nenhuma mesa. Basta usar as seguintes consultas, antes daSELECT
consulta real em que você deseja usar o curinga:fonte
bem, no mysql 5.5, o operador like é insensível ... então, se seu vale é elm ou ELM ou Elm ou eLM ou qualquer outro e você usa como '% elm%', ele listará todos os valores correspondentes.
Não posso dizer sobre versões anteriores do mysql.
Se você for no Oracle, como trabalhar com distinção entre maiúsculas e minúsculas, se você digitar como '% elm%', será usado apenas isso e ignorará maiúsculas.
Estranho, mas é assim que é :)
fonte
*_ci
, que significa "insensitivo a maiúsculas e minúsculas". Como isso é o padrão para todos os conjuntos de caracteres suportados (problemashow character set;
para verificar isso) - a resposta é parcialmente verdadeira :-) Apenas o motivo está incorreto. Não é o operador que não diferencia maiúsculas de minúsculas, é o agrupamento padrão que é.fonte
Você deve configurar a codificação e ordenação adequadas para suas tabelas.
A codificação de tabela deve refletir a codificação de dados real. Qual é a sua codificação de dados?
Para ver a codificação da tabela, você pode executar uma consulta
SHOW CREATE TABLE tablename
fonte
Quando quero desenvolver pesquisas de caso insensíveis, sempre converto todas as seqüências para minúsculas antes de fazer comparações
fonte
Você pode usar o seguinte método
use este método como abaixo
fonte
Comparações de strings não binárias (incluindo
LIKE
) não diferenciam maiúsculas de minúsculas por padrão no MySql: https://dev.mysql.com/doc/refman/en/case-sensitivity.htmlfonte