Je cherche à effectuer une recherche insensible à la casse dans une base de données Firebird, sans modifier les requêtes réelles. En d'autres termes, j'aimerais que toutes mes instructions "SELECT/WHERE/LIKE" existantes récupèrent BOB, Bob et Bob. La configuration de Firebird permet-elle de modifier ce comportement?Configuration Firebird - désactiver la sensibilité à la casse
Répondre
Finalement, je suis allé à la création de colonnes d'ombre contenant des versions inférieures tubé des champs obligatoires.
Ce qui signifie que vous deviez réellement modifier la requête ... –
Essayez d'utiliser quelque chose comme: Imaginez que vous avez une table de personnes comme celle-ci:
CREATE TABLE PERSONS (
PERS_ID INTEGER NOT NULL PRIMARY KEY,
LAST_NAME VARCHAR(50),
FIRST_NAME VARCHAR(50)
);
Maintenant, il y a une application qui permet à l'utilisateur de rechercher les personnes par nom et/ou prénom . Ainsi, l'utilisateur entre le nom de famille de la personne qu'il cherche.
Nous voulons que cette recherche soit insensible à la casse, c'est-à-dire que l'utilisateur entre "Presley", "presley", "PRESLEY", ou même "PrESley", nous voulons toujours trouver le roi.
Ah oui, et nous voulons que cette recherche soit rapide, s'il vous plaît. Il doit donc y avoir un index qui l'accélère.
Une méthode simple pour effectuer des comparaisons insensibles à la casse consiste à mettre en majuscules les deux chaînes, puis à comparer les versions majuscules des deux chaînes.
La mise en majuscule a des limites, car certaines lettres ne peuvent pas être majuscules. Notez aussi qu'il y a des langages/scripts où il n'y a pas de cas. Ainsi, la technique décrite dans cet article fonctionnera mieux pour les langues européennes.
Afin d'obtenir des résultats vraiment parfaits, il faudrait un assemblage insensible à la casse (CI) et/ou insensible aux accents (AI). Cependant, au moment de la rédaction de ce document (juillet 2006), il n'y a que deux classements d'AI/CI pour Firebird 2.0. La situation devrait s'améliorer avec le temps.
(Vous devez connaître les concepts de jeux de caractères et interclassement afin de comprendre ce qui vient ensuite. J'utilise la collation DE_DE
dans mes exemples, c'est la collation pour l'allemand/Allemagne dans le jeu de caractères ISO8859_1
.)
Pour obtenir les résultats corrects de la fonction UPPER()
intégrée à Firebird, vous devez spécifier un classement. Cela peut être dans la définition DDL de la table:
CREATE TABLE PERSONS (
PERS_ID INTEGER NOT NULL PRIMARY KEY,
LAST_NAME VARCHAR(50) COLLATE DE_DE,
FIRST_NAME VARCHAR(50) COLLATE DE_DE
);
ou il peut être fait lorsque vous appelez la fonction UPPER()
:
SELECT UPPER (LAST_NAME COLLATE DE_DE) FROM PERSONS;
http://www.destructor.de/firebird/caseinsensitivesearch.htm
ou vous pouvez modifier vos requêtes et ajoutez la lower()
fonction
LOWER()
A vailable en: DSQL, ESQL, PSQL
Ajouté en: 2,0
Description: Renvoie l'équivalent minuscule de la chaîne d'entrée. Cette fonction met également correctement en minuscules les caractères non-ASCII, même si le classement par défaut (binaire) est utilisé. Le jeu de caractères doit cependant être approprié: avec ASCII ou NONE par exemple, seuls les caractères ASCII sont en minuscules; avec OCTETS, la chaîne entière est retournée inchangée.
Type de résultat: VAR(CHAR)
Syntaxe:
LOWER (str)
Important
Si la fonction externe LOWER
est déclarée dans votre base de données, il la fonction interne obscurcir. Pour rendre la fonction interne disponible, DROP ou ALTER la fonction externe (UDF).
Exemple:
select field from table
where lower(Name) = 'bob'
http://www.firebirdsql.org/refdocs/langrefupd21-intfunc-lower.html
Nécromage.
Au lieu d'un champ minuscule, vous pouvez spécifier le classement:
SELECT field FROM table
WHERE Name = 'bob' COLLATE UNICODE_CI
Voir https://firebirdsql.org/refdocs/langrefupd21-collations.html
Peut-être que vous pouvez également spécifier que le jeu de caractères par défaut pour la base de données, voir http://www.destructor.de/firebird/charsets.htm
- 1. OData et sensibilité à la casse
- 2. Sensibilité à la casse Mono IOMAP
- 3. Sensibilité à la casse dans SSMS
- 4. question mod_rewrite - sensibilité à la casse
- 5. Sensibilité à la casse dans le script shell
- 6. Courte question sur la sensibilité à la casse; Php
- 7. javascript: ignorer la sensibilité à la casse des chaînes
- 8. wsdl java class la sensibilité à la casse
- 9. Problème de Subversion avec sensibilité à la casse
- 10. Sensibilité à la casse des noms d'action dans Struts 2
- 11. Sélection de chaînes et sensibilité à la casse
- 12. Trier une liste de tuples sans sensibilité à la casse
- 13. WPF Combobox auto complète/intellisense sensibilité à la casse
- 14. ActiveRecord> Adaptateur MySQL> Sensibilité à la casse
- 15. Ignorer la sensibilité à la casse lors de la comparaison de chaînes dans PHP
- 16. PHP ignore la sensibilité à la casse lors de la comparaison des valeurs de tableau
- 17. Comment forcer la sensibilité à la casse du préprocesseur Visual Studio aveC#includes?
- 18. Comment utiliser la sensibilité à la casse dans instr() dans MySQL?
- 19. Où puis-je interroger la sensibilité à la casse d'une base de données Oracle?
- 20. Méthode d'extension d'intersection, la sensibilité à la casse ne fonctionne pas
- 21. Comment ignorer la sensibilité à la casse liste <string>
- 22. Conserver la sensibilité à la casse lors de l'importation de db dans Windows
- 23. Sensibilité à la pression JQTouch
- 24. EJB3 annotations sensibles à la casse
- 25. SVN peut-il gérer les problèmes de sensibilité à la casse?
- 26. Aide de script Bash avec if then else et sensibilité à la casse
- 27. Différence de sensibilité à la casse dans SELECT COLUMN et COUNT, mysql?
- 28. Désactiver les URL sensibles à la casse dans Google App Engine
- 29. Comment rendre WPF insensible à la casse?
- 30. Comment créer une expression régulière correspondant à un mot mal orthographié avec la sensibilité à la casse d'origine?
La sensibilité à la casse est définie par le classement pour une base de données et est généralement rendue évidente dans le nom de classement ("cs" signifie "sensible à la casse", tandis que "ci" signifie "Case InSENSitive"). Voici un lien vers les collations de Firebird: http://www.firebirdsql.org/refdocs/langrefupd21-collations.html –