Quelqu'un peut-il me dire si une SELECT
requête MySQL est sensible à la casse ou à la casse par défaut? Et sinon, quelle requête devrais-je envoyer pour que je puisse faire quelque chose comme:
SELECT * FROM `table` WHERE `Value` = "iaresavage"
Alors qu'en réalité, la valeur réelle de Value
est IAreSavage
.
'value' in ('val1', 'val2', 'val3')
Réponses:
Ils ne sont pas sensibles à la casse , sauf si vous effectuez une comparaison binaire .
la source
Vous pouvez minuscule la valeur et le paramètre passé:
Une autre (meilleure) façon serait d'utiliser l'
COLLATE
opérateur comme indiqué dans la documentationla source
SELECT
ressemblerait cette déclarationCOLLATE
alors?LOWER()
ou uneCOLLATE
clause arbitraire peut complètement contourner un index, et au fil du temps, à mesure que votre table grandit, cela peut avoir des implications drastiques sur les performances. Ce sont probablement des noms d'utilisateur que vous recherchez? Utilisez un classement insensible à la casse et ajoutez un index unique à la colonne. UtilisezEXPLAIN
pour confirmer que l'index est utilisé.UTILISER BINARY
Ceci est une simple sélection
SELECT * FROM myTable WHERE 'something' = 'Something'
= 1
Ceci est une sélection avec binaire
SELECT * FROM myTable WHERE BINARY 'something' = 'Something'
ou
SELECT * FROM myTable WHERE 'something' = BINARY 'Something'
= 0
la source
Les comparaisons ne respectent pas la casse lorsque la colonne utilise un classement qui se termine par
_ci
(comme le classement par défautlatin1_general_ci
) et sont sensibles à la casse lorsque la colonne utilise un classement qui se termine par_cs
ou_bin
(comme les classementsutf8_unicode_cs
etutf8_bin
).Vérifier le classement
Vous pouvez vérifier votre serveur , votre base de données et vos classements de connexion en utilisant:
et vous pouvez vérifier le classement de votre table en utilisant:
Modifier le classement
Vous pouvez modifier le classement de votre base de données, table ou colonne en quelque chose de sensible à la casse comme suit:
Vos comparaisons doivent désormais être sensibles à la casse.
la source
La comparaison de chaînes dans la phrase WHERE n'est pas sensible à la casse. Vous pouvez essayer de comparer en utilisant
ou
et vous obtiendrez le même résultat . C'est le comportement par défaut de MySQL.
Si vous voulez que la comparaison soit sensible à la casse , vous pouvez ajouter
COLLATE
comme ceci:Ce SQL donnerait un résultat différent avec celui-ci: WHERE
colname
COLLATE latin1_general_cs = 'keyword'latin1_general_cs
est un classement commun ou par défaut dans la plupart des bases de données.la source
Le classement que vous choisissez définit si vous êtes sensible à la casse ou non.
la source
La valeur par défaut est insensible à la casse, mais la prochaine chose la plus importante que vous devriez examiner est la façon dont la table a été créée en premier lieu, car vous pouvez spécifier la sensibilité à la casse lorsque vous créez la table.
Le script ci-dessous crée une table. Remarquez en bas, il est écrit "COLLATE latin1_general_cs". Que cs à la fin signifie sensible à la casse. Si vous vouliez que votre table soit insensible à la casse, vous devez soit laisser cette partie ou utiliser "COLLATE latin1_general_ci".
Si votre projet est tel que vous pouvez créer votre propre table, il est logique de spécifier votre préférence de respect de la casse lorsque vous créez la table.
la source
SQL Select n'est pas sensible à la casse.
Ce lien peut vous montrer comment faire est sensible à la casse: http://web.archive.org/web/20080811231016/http://sqlserver2000.databases.aspfaq.com:80/how-can-i-make-my- sql-queries-case-sensitive.html
la source
Essayez avec:
la source
Notez également que les noms de table sont sensibles à la casse sous Linux, sauf si vous définissez la
lower_case_table_name
directive config sur 1 . En effet, les tables sont représentées par des fichiers sensibles à la casse sous Linux.Méfiez-vous particulièrement du développement sur Windows qui n'est pas sensible à la casse et du déploiement en production où il se trouve. Par exemple:
contre la table myTable réussira sous Windows mais échouera sous Linux, encore une fois, à moins que la directive susmentionnée ne soit définie.
Référence ici: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
la source
lower_case_table_name
comme spécifié dans la réponse sous laquelle nous commentonsLa solution actuellement acceptée est généralement correcte.
Si vous utilisez une chaîne non binaire (CHAR, VARCHAR, TEXT), les comparaisons ne respectent pas la casse , selon le classement par défaut.
Si vous utilisez une chaîne binaire (BINARY, VARBINARY, BLOB), les comparaisons sont sensibles à la casse, vous devrez donc les utiliser
LOWER
comme décrit dans d'autres réponses.Si vous n'utilisez pas le classement par défaut et que vous utilisez une chaîne non binaire, la sensibilité à la casse est déterminée par le classement choisi.
Source: https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html . Lisez attentivement. Certains se sont trompés en disant que les comparaisons sont nécessairement sensibles à la casse ou insensibles. Ce n'est pas le cas.
la source
Tu peux l'essayer. j'espère que ce sera utile.
la source
Les champs de chaîne avec l'indicateur binaire défini seront toujours sensibles à la casse. Si vous avez besoin d'une recherche sensible à la casse pour un champ de texte non binaire, utilisez ceci: SELECT 'test' REGEXP BINARY 'TEST' AS RESULT;
la source