J'ai regardé autour de moi et je n'ai pas trouvé ce que je cherchais, alors voilà.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Cela fonctionne bien, mais pas si l'arbre s'appelle Elm ou ELM etc ...
Comment rendre la casse SQL insensible à cette recherche générique?
J'utilise MySQL 5 et Apache.
mysql
sql
sql-like
case-insensitive
David Morrow
la source
la source
BINARY
comme ici: stackoverflow.com/questions/7857669/…like
devrait être insensible à la casse par défaut.Réponses:
En fait, si vous ajoutez
COLLATE UTF8_GENERAL_CI
à la définition de votre colonne, vous pouvez simplement omettre toutes ces astuces: cela fonctionnera automatiquement.Cela reconstruira également tous les index de cette colonne afin qu'ils puissent être utilisés pour les requêtes sans être précédés de '%'
la source
COLLATE UTF8_GENERAL_CI
à la définition de votre colonne, vous pouvez simplement omettre toutes ces astuces: cela fonctionnera automatiquement.ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
. Cela reconstruira également tous les index de cette colonne afin qu'ils puissent être utilisés pour les requêtes sans être précédés de '%'.J'ai toujours résolu cela en utilisant plus bas:
la source
La sensibilité à la casse est définie dans les paramètres de classement des colonnes / tables / bases de données. Vous pouvez effectuer la requête sous un classement spécifique de la manière suivante:
par exemple.
(Remplacez
utf8_general_ci
par le classement que vous jugez utile). Le_ci
signifie insensible à la casse .la source
utf8_general_ci
fonctionne bien, cependant.COLLATE
soit faire un tour simple comme celui-ci (LOWER()
vos deux chaînes avant la comparaison)SELECT * FROM products WHERE name COLLATE utf8_general_ci LIKE 'AB47TU';
Voici l'exemple d'une simple requête LIKE:
Maintenant, insensible à la casse en utilisant la fonction LOWER ():
la source
COLLATE
problèmes de formatUtilisez simplement:
Ou utiliser
Les deux fonctions fonctionnent de la même façon
la source
Je fais quelque chose comme ça.
Obtenir les valeurs en minuscules et MySQL fait le reste
Et pour MySQL PDO Alternative:
la source
Je pense que cette requête fera une recherche insensible à la casse:
la source
utilisation
ILIKE
cela a fonctionné pour moi !!
la source
Vous n'avez besoin d'
ALTER
aucune table. Utilisez simplement les requêtes suivantes, avant laSELECT
requête réelle que vous souhaitez utiliser le caractère générique:la source
bien dans mysql 5.5, comme l'opérateur est insensible ... donc si votre valle est elm ou ELM ou Elm ou eLM ou tout autre, et que vous utilisez comme '% elm%', il listera toutes les valeurs correspondantes.
Je ne peux pas dire sur les versions antérieures de mysql.
Si vous allez dans Oracle, comme le travail en respectant la casse, donc si vous tapez comme '% elm%', il n'ira que pour cela et ignorera les majuscules.
Étrange, mais c'est comme ça :)
la source
*_ci
, ce qui signifie «insensible à la casse». Comme cela se trouve être par défaut pour tous les jeux de caractères pris en charge (problèmeshow character set;
pour vérifier cela) - la réponse est partiellement vraie :-) Seule la raison est incorrecte. Ce n'est pas l'opérateur qui est insensible à la casse, c'est le classement par défaut qui l'est.la source
Vous devez configurer le codage et le classement appropriés pour vos tables.
Le codage de la table doit refléter le codage réel des données. Quel est l'encodage de vos données?
Pour voir le codage de table, vous pouvez exécuter une requête
SHOW CREATE TABLE tablename
la source
Lorsque je souhaite développer des recherches de casse insensibles, je convertis toujours chaque chaîne en minuscules avant de faire une comparaison
la source
Vous pouvez utiliser la méthode suivante
utilisez cette méthode comme ci-dessous
la source
Les comparaisons de chaînes non binaires (y compris
LIKE
) ne respectent pas la casse par défaut dans MySql: https://dev.mysql.com/doc/refman/en/case-sensitivity.htmlla source