Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2003, 22h02   #1
AHO
Invité de passage
 
Inscription : décembre 2002
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 1
Points : 1
Points : 1
Par défaut jeux de caractères

Avec interbase open source je n'arrive pas à sauvegarder des données accentués en utilisant isql même aussi en sql dynamique
comment résoudre ce problème
merci
AHO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2003, 01h29   #2
Futur Membre du Club
 
Inscription : septembre 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 19
Points : 19
Points : 19
Par défaut Re: jeux de caractères

Citation:
Envoyé par AHO
Avec interbase open source je n'arrive pas à sauvegarder [...]
c'est quoi "sauvegarder" ...
ça viendrait pas de ton "character set", j'avais un pb avec les accents et les caractères français et ils se sont envolé dès que j'ai mis le character set à "none"

ci@o bello
SuperTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2003, 10h02   #3
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Par défaut Re: jeux de caractères

Citation:
Envoyé par SuperTotor
ça viendrait pas de ton "character set", j'avais un pb avec les accents et les caractères français et ils se sont envolé dès que j'ai mis le character set à "none"
ci@o bello
Oui tu n'as plus le meme problème maintenant que tu as le character set à none. Tu ne peux plus trier tes données correctement et les recherches demande d'utiliser une astuce pour qu'elles fonctionnent correctement....
Bref ce n'est pas la bonne solution...

AHO tu as utilisé qu'elle character Set ? ISO_8859_2 ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2003, 19h22   #4
Futur Membre du Club
 
Inscription : septembre 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 19
Points : 19
Points : 19
Par défaut Re: jeux de caractères

Citation:
Envoyé par Barbibulle
AHO tu as utilisé qu'elle character Set ? ISO_8859_2 ?
Où as tu trouvé ce Character Set ???

Amicalement,

Toanui.

PS: Win 2K/SP3 - IB 6.01 - Delphi 6 Ent.
SuperTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2003, 13h07   #5
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
j'ai la version 6.01 open source d'interbase et elle y est parmis plein d'autres...
tu as quoi comme version ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2003, 21h01   #6
Futur Membre du Club
 
Inscription : septembre 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 19
Points : 19
Points : 19
j'ai la version 6.01 que j'ai téléchargé il y a 2 semaines sur le site de Borland et qui est dans le fichier InterBase_WI-V6.0.1-server.ZIP.
Par contre, je n'ai pas trouvé ton Car. Set ... bizarre non ?!
SuperTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2003, 22h03   #7
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
J'ai exactement la meme version que la tienne téléchargée du meme endroit...

Quand tu fais avec IBConsole Create Database... tu as la liste dans la combo box Default Charactere Set.

Par defaut tu as 'none' mais si tu remontes dans la liste de la combo tu as environ 3 positions au dessus l'ISO8859_1.

Voilà le tour est joué...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2003, 19h02   #8
Futur Membre du Club
 
Inscription : septembre 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 19
Points : 19
Points : 19
Par défaut Re: jeux de caractères

Citation:
Envoyé par Barbibulle
AHO tu as utilisé qu'elle character Set ? ISO_8859_2 ?
Ok ... je viens de comprendre que tu avais fait une faute de frappe ... non ?! tu voulais dire ISO8859_1 et non ISO_8859_2 ?

Celui là, je l'ai mais ça me fait des bug avec les caractères spéciaux du français (genre: °, à, ç, ...)
SuperTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2003, 21h48   #9
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Par défaut Re: jeux de caractères

Citation:
Envoyé par SuperTotor
Ok ... je viens de comprendre que tu avais fait une faute de frappe ... non ?! tu voulais dire ISO8859_1 et non ISO_8859_2 ?
Celui là, je l'ai mais ça me fait des bug avec les caractères spéciaux du français (genre: °, à, ç, ...)
Oui j'ai fait une faute de frappe... désolé mais je crois que le 2 existe (mais pour les versions supérieurs.. ou le l ai lu quelque part c est sur car en le voyant je m etais dis que je l avais pas...)

Enfin bref... OUI c'est bien l'ISO_8859_1 qu'il faut utiliser.
Oui tu ne peux pas saisir avec IBConsole les caractères accentués simplement...
Mais avec Delphi il n'y a pas de PB pour faire des mises à jour, des insert etc....
C'est ou que tu as rencontré des bugs ? sous Delphi ou IBConsole ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2003, 02h29   #10
Futur Membre du Club
 
Inscription : septembre 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 19
Points : 19
Points : 19
Par défaut Re: jeux de caractères

Citation:
Envoyé par Barbibulle
Oui tu ne peux pas saisir avec IBConsole les caractères accentués simplement...
Mais avec Delphi il n'y a pas de PB pour faire des mises à jour, des insert etc....
C'est ou que tu as rencontré des bugs ? sous Delphi ou IBConsole ?
C'est vrai, avec ib console il ne valide pas si tu as des caractere exotiquement français.

Pour Delphi, il me sort cette exception :
Code :
1
2
3
 
Arithmetic exception, numeric overflow OR string truncation
Cannot transliterate character BETWEEN character sets
j'utilise un TDBGrid avec les composant IB ... je me suis résolu à mettre le character set à none.

Par contre je ne vois pas trop les pb de tri dont tu parle ni d'astuces pour des recherches correctes ?
SuperTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2003, 09h48   #11
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Pour le tri :
si tu as mis le character Set à none :
Essaye ceci :

Code :
1
2
3
4
5
CREATE TABLE "MATABLE"
(
  "LIB1" VARCHAR(20) CHARACTER SET ISO8859_1 NOT NULL COLLATE FR_FR,
  "LIB2" VARCHAR(20) NOT NULL
);
Ca crée une table avec deux libellés un qui a le charactere set à ISO8859_1 et l'autre libellé à none.
(Quand tu crées une Database avec un character Set à ISO8859_1 toutes les colonnes de types caractères seront créés avec un caractèr Set à ISO8859_1 sauf si tu lui précise le contraire...)

Maintenant insère les libellés suivants : (Pour les libellés comportant un é tu dois le faire via Delphi ou sinon ce n'est pas important ne les copie pas je vais te donner le résultat...)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
INSERT INTO MATABLE (LIB1, LIB2) VALUES('a', 'a');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('ae', 'ae');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('AA', 'AA');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('A', 'A');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('Z', 'Z');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('é', 'é');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('E', 'E');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('aé', 'aé');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('Aé', 'Aé');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('AE', 'AE');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('Ae', 'Ae');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('Az', 'Az');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('AZ', 'AZ');
INSERT INTO MATABLE (LIB1, LIB2) VALUES('Aa', 'Aa');
Execute ceci :

Citation:
select * from MATABLE order by LIB2;
résultat :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LIB1                     LIB2                     
=====================    =====================    
A                        A                        
AA                       AA                       
AE                       AE                       
AZ                       AZ                       
Aa                       Aa                       
Ae                       Ae                       
Az                       Az                       
Aé                       Aé                       
E                        E                        
Z                        Z                        
a                        a                        
ae                       ae                       
aé                       aé                       
é                        é
Comme tu peux le voir les majuscules sont toutes considérées comme étant plus petites que les minuscules le 'Z' est avant le 'a'.
Les accents et caractères spéciaux sont plus petits que les 'lettres classiques' : le 'é' est après le 'z'.

Donc si tu peux résoudre en partie le tri en mettant tout en majuscule

Code :
SELECT upper(LIB2), LIB2 FROM MATABLE ORDER BY 1
Résultat:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
F_1                      LIB2                     
=====================    =====================    
A                        A                        
A                        a                        
AA                       AA                       
AA                       Aa                       
AE                       AE                       
AE                       Ae                       
AE                       ae                       
AZ                       AZ                       
AZ                       Az                       
Aé                       Aé                       
Aé                       aé                       
E                        E                        
Z                        Z                        
é                        é
Il reste le problème des accents et caractères spéciaux qui ne sont pas mis en majuscule et reste donc considérés comme étant plus grand que le Z. Le 'é' est après le 'Z'

Maintenant essaye le tri sur la colonne ayant le character set ISO8859_1:
Code :
SELECT * FROM MATABLE ORDER BY LIB2;
Résultat :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LIB1                     LIB2                     
=====================    =====================    
a                        a                        
A                        A                        
Aa                       Aa                       
AA                       AA                       
ae                       ae                       
Ae                       Ae                       
AE                       AE                       
aé                       aé                       
Aé                       Aé                       
Az                       Az                       
AZ                       AZ                       
E                        E                        
é                        é                        
Z                        Z
Tout est parfaitement trié...

Pour Info (la mise en majuscule transforme bien le 'é' en 'E'
Code :
SELECT upper(LIB1), LIB1 FROM MATABLE ORDER BY 1
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
F_1                      LIB1                     
=====================    =====================    
A                        A                        
A                        a                        
AA                       AA                       
AA                       Aa                       
AE                       AE                       
AE                       Ae                       
AE                       ae                       
AE                       Aé                       
AE                       aé                       
AZ                       AZ                       
AZ                       Az                       
E                        E                        
E                        é                        
Z                        Z
Ceci est valable pour les tri mais pour les recherches :

essaye :
Code :
SELECT * FROM MATABLE WHERE UPPER(LIB2) = 'AE'
Code :
1
2
3
4
5
LIB1                     LIB2                     
=====================    =====================    
ae                       ae                       
AE                       AE                       
Ae                       Ae
et
Code :
SELECT * FROM MATABLE WHERE UPPER(LIB1) = 'AE'
resultat :
Code :
1
2
3
4
5
6
7
LIB1                     LIB2                     
=====================    =====================    
ae                       ae                       
aé                       aé                       
Aé                       Aé                       
AE                       AE                       
Ae                       Ae
Ce qui tout de meme mieux quand on recherche des mots dans des libellés.

Maintenant que je t'ai prouvé qu'il faut utiliser le character Set ISO8859_1 pour que tout fonctionne corectement, tu dois avoir très envie de résoudre ton problème de
Code :
1
2
Arithmetic exception, numeric overflow OR string truncation 
Cannot transliterate character BETWEEN character sets
....

Bon la solution est extremement...SIMPLE !
Et oui ....
(Bon j'arrete de te faire languir...)
DOUBLE CLIC SUR LE COMPOSANT IBDataBase et tu choisis dans "Jeu de caractères" : ISO8859_1... voilà c'est pas plus compliqué. Ca te rajoute le paramètre "lc_ctype=ISO8859_1" dans la liste des paramètres de connexion.
Et maintenant tu peux sans problème insérer les caractères accentués etc...

Bon développements.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2003, 18h45   #12
Futur Membre du Club
 
Inscription : septembre 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : septembre 2002
Messages : 19
Points : 19
Points : 19
Thanks Barbibule !

t'es vraiment le BOSS, grâce à toi j'ai fait "un pas de géant ..." en avant

SuperTotor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h19.


 
 
 
 
Partenaires

Hébergement Web