Alguém pode me dizer se uma SELECT
consulta MySQL é sensível a maiúsculas ou minúsculas por padrão? E se não, qual consulta eu teria que enviar para que eu possa fazer algo como:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Onde na realidade, o valor real de Value
é IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Respostas:
Eles não diferenciam maiúsculas de minúsculas , a menos que você faça uma comparação binária .
fonte
Você pode minúscula o valor e o parâmetro passado:
Outra (melhor) maneira seria usar o
COLLATE
operador conforme mencionado na documentaçãofonte
SELECT
declaração usandoCOLLATE
então?LOWER()
ou umaCOLLATE
cláusula arbitrária pode ignorar completamente um índice e, com o tempo, à medida que a tabela cresce, isso pode ter implicações drásticas no desempenho. Provavelmente, esses são nomes de usuário que você está procurando? Use um agrupamento sem distinção entre maiúsculas e minúsculas e adicione um índice exclusivo à coluna. UseEXPLAIN
para confirmar que o índice está sendo usado.USE BINÁRIO
Esta é uma seleção simples
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
Este é um select com binário
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
ou
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
fonte
As comparações diferenciam maiúsculas de minúsculas quando a coluna usa um agrupamento que termina com
_ci
(como o agrupamento padrãolatin1_general_ci
) e diferenciam maiúsculas de minúsculas quando a coluna usa um agrupamento que termina com_cs
ou_bin
(como os agrupamentosutf8_unicode_cs
eutf8_bin
).Verificar agrupamento
Você pode verificar seu servidor , banco de dados e agrupamentos de conexão usando:
e você pode verificar o agrupamento da tabela usando:
Alterar agrupamento
Você pode alterar o agrupamento do banco de dados, tabela ou coluna para algo que diferencia maiúsculas de minúsculas da seguinte maneira:
Suas comparações agora devem fazer distinção entre maiúsculas e minúsculas.
fonte
A comparação de cadeias na frase WHERE não diferencia maiúsculas de minúsculas. Você pode tentar comparar usando
ou
e você obterá o mesmo resultado . Esse é o comportamento padrão do MySQL.
Se você deseja que a comparação seja sensível a maiúsculas e minúsculas , adicione-
COLLATE
a assim:Esse SQL daria resultados diferentes com este: WHERE
colname
COLLATE latin1_general_cs = 'keyword'latin1_general_cs
é agrupamento comum ou padrão na maioria dos bancos de dados.fonte
O agrupamento escolhido define se você diferencia maiúsculas ou minúsculas.
fonte
O padrão não diferencia maiúsculas de minúsculas, mas a próxima coisa mais importante que você deve examinar é como a tabela foi criada em primeiro lugar, porque você pode especificar a distinção entre maiúsculas e minúsculas ao criar a tabela.
O script abaixo cria uma tabela. Observe na parte inferior que diz "COLLATE latin1_general_cs". Que cs no final significa maiúsculas de minúsculas. Se você quisesse que sua tabela fizesse distinção entre maiúsculas e minúsculas, você deixaria essa parte de fora ou usaria "COLLATE latin1_general_ci".
Se seu projeto é tal que você pode criar sua própria tabela, faz sentido especificar sua preferência de distinção entre maiúsculas e minúsculas ao criar a tabela.
fonte
O SQL Select não diferencia maiúsculas de minúsculas.
Este link mostra como fazer distinção entre maiúsculas e minúsculas: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-case-sensitive.html
fonte
Tente com:
fonte
Observe também que os nomes de tabela diferenciam maiúsculas de minúsculas no Linux, a menos que você defina a
lower_case_table_name
diretiva de configuração como 1 . Isso ocorre porque as tabelas são representadas por arquivos que diferenciam maiúsculas de minúsculas no Linux.Cuidado especialmente com o desenvolvimento no Windows que não diferencia maiúsculas de minúsculas e a implantação na produção onde está. Por exemplo:
contra a tabela myTable terá êxito no Windows, mas falhará no Linux novamente, a menos que a diretiva mencionada acima esteja definida.
Consulte aqui: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
fonte
lower_case_table_name
especificado na resposta em que estamos comentando #A solução atualmente aceita é principalmente correta.
Se você estiver usando uma sequência não binária (CHAR, VARCHAR, TEXT), as comparações não diferenciam maiúsculas de minúsculas , pelo agrupamento padrão.
Se você estiver usando uma string binária (BINARY, VARBINARY, BLOB), as comparações diferenciam maiúsculas de minúsculas, portanto, você precisará usar
LOWER
conforme descrito em outras respostas.Se você não estiver usando o agrupamento padrão e uma cadeia não-binária, a distinção entre maiúsculas e minúsculas será decidida pelo agrupamento escolhido.
Fonte: https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html . Leia atentamente. Alguns outros erraram ao dizer que as comparações são necessariamente sensíveis a maiúsculas ou minúsculas. Este não é o caso.
fonte
Você pode experimentá-lo. espero que seja util.
fonte
Os campos de sequência com o conjunto de sinalizadores binários sempre diferenciam maiúsculas de minúsculas. Se você precisar de uma pesquisa que diferencia maiúsculas de minúsculas de um campo de texto não binário, use: SELECT 'test' REGEXP BINARY 'TEST' COMO RESULTADO;
fonte