Je voudrais définir un index unique sur une colonne de type varchar / collation FR_FR et que cet cet index soit insensible a la casse et aux accents.
Est-ce possible ?
J'utilise firebird 2.0.3
Je voudrais définir un index unique sur une colonne de type varchar / collation FR_FR et que cet cet index soit insensible a la casse et aux accents.
Est-ce possible ?
J'utilise firebird 2.0.3
Si vous êtes libre, choisissez le Logiciel Libre.
cf notes de versions "Expression Indexes"
et pour le collate, avec 2.0.3 le ES_ES_CI_AI ferra l'affaire (il y a un FR_FR_CI_AI dans Firebird 2.1)
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
"Expression Indexes" ? je connaissais pas, d'aprés ce que j'ai compris il permet de créer un index sur une colonne avec une expression appliquée a cette même colonne, c'est une solution; mais il n'y aurais pas un jeu de caractères qui appliquerait la règle que j'ai définie plus haut directement ?
A propos des collations, j'ai remarqué qu'un domaine avec une collation FR_FR appliqué a une colonne n'a pas d'effet sur elle.
Exp: si colonne='Aaéèçà' -> UPPER(colonne)='AAÉÈÇÀ'.
alors que si cette colonne est configuré directement avec Collate FR_FR,
le résultat est UPPER(colonne)='AAEECA'.
C'est normal ça ?
Si vous êtes libre, choisissez le Logiciel Libre.
ES_ES_CI_AI fera l'affaire (il y a un FR_FR_CI_AI dans Firebird 2.1)
http://www.developpez.net/forums/sho...ht=ES_ES_CI_AI
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE DOMAIN D_1 AS VARCHAR(10) COLLATE FR_FR; COMMIT; CREATE TABLE T12 ( C1 D_1 ); COMMIT; INSERT INTO T12 VALUES ('Aaéèçà'); COMMIT; SELECT UPPER(C1) FROM T12; UPPER ----- AAEECA
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
C'est en mettant a jour une colonne avec un domaine que j'ai rencontré ce soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 CREATE TABLE T1 (C1 VARCHAR(10) CHARACTER SET ISO8859_1) CREATE DOMAIN D_1 AS VARCHAR(10) CHARACTER SET ISO8859_1 COLLATE FR_FR; update RDB$RELATION_FIELDS set --ALTER TABLE T1 ALTER C1 TYPE D_1; RDB$FIELD_SOURCE = 'D_1' where (RDB$FIELD_NAME = 'C1') and (RDB$RELATION_NAME = 'T1') INSERT INTO T1 VALUES ('Aaéèçà'); SELECT UPPER(C1) FROM T1 UPPER = 'AAÉÈÇÀ'
Si vous êtes libre, choisissez le Logiciel Libre.
mais ça, si tu veux jouer toi même avec les tables systèmes, il faut que tu assumes ...
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
En faite il faudrait plutôt faire comme ça :
En plus, reconfigurer une colonne c'est vraiment pas jouer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 update RDB$RELATION_FIELDS set RDB$FIELD_SOURCE = 'D_1', RDB$COLLATION_ID = 4 -- N° 4 -> Collate FR_FR where (RDB$FIELD_NAME = 'C1') and (RDB$RELATION_NAME = 'T1')
Si vous êtes libre, choisissez le Logiciel Libre.
Le risque est calculé, je travaille sur une base en développement encore.
Si vous êtes libre, choisissez le Logiciel Libre.
Je pense qu'il serait pas mal d'extraire le script et de le faire ravaler dans une base vierge après modification pour enlever tous les doutes.
Même en procédant par un :
le résultat est le même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALTER TABLE T1 ALTER C1 TYPE D_1;
Si vous êtes libre, choisissez le Logiciel Libre.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager