IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Connexion aux bases de données Firebird Discussion :

Connexion JDBC - Problème de Charset


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Connexion JDBC - Problème de Charset
    Bonjour,
    J'utilise cette chaine de connexion pour me connecter à une base Firebird 1.5 :
    jdbc:firebirdsql:<MON_IP>/3050:<CHEMIN BASE>

    Comme j'avais des problèmes de charset, j'ai ajouté ceci :
    jdbc:firebirdsql:<MON_IP>/3050:<CHEMIN BASE>?encoding=ISO8859_1

    Dans un autre programme, un collaborateur a repris la même chaine de connexion, mais pour le charset il a fait ceci :
    jdbc:firebirdsql:<MON_IP>/3050:<CHEMIN BASE>?ISO8859_1
    Il n'a pas mis le nom de la propriété "encoding".

    Ma question est la suivante : est-ce que ces 2 chaînes de connexion vont faire la même chose ? Est-ce que le paramètre "ISO8859-1" va être interprété, ou est-ce qu'il va être ignoré ?

    J'ai l'impression que ca n'a pas le même comportement, ce qui me semblerait logique. Mais ce qui m'interpelle par contre, c'est que pour une base j'avais cette erreur avec le paramètre "encoding=ISO8859_1" :
    org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544321. arithmetic exception, numeric overflow, or string truncation
    Cannot transliterate character between character sets

    J'avais donc fouillé sur les forums, et j'avais trouvé le paramètre suivant pour remplacer "encoding=ISO8859_1" : "ctype_none=ACP".

    Ca m'a résolu mon problème. Mais lorsque j'ai exécuté sur cette même base le programme avec la chaîne de connexion de mon collaborateur, je n'avais plus d'erreur !!!

    Je vous remercie d'avance pour vos réponse.

    GT

  2. #2
    Membre expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Points : 3 712
    Points
    3 712
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par fredgt Voir le message
    Ma question est la suivante : est-ce que ces 2 chaînes de connexion vont faire la même chose ? Est-ce que le paramètre "ISO8859-1" va être interprété, ou est-ce qu'il va être ignoré ?
    Non, sans la clé "encoding", ce paramètre va être ignoré !
    Pour information, cela se passe dans la classe AbstractDriver.java plus précisément dans la méthode connect(String url, Properties originalInfo).
    Dans un premier temps, est faite une normalisation des paramètres : ceux présents dans url sont si besoin rajoutés à ceux présents dans originalInfo (cas de connexion en passant des paramètres de type Properties): il est fait appel aux méthode normalize(url, originalInfo) et convertUrlParams(String url, HashMap info) de la classe FBDriverPropertyManager.
    Ensuite url est tronquée à partir du caractère "?"

    Pour information, les paramètres passés dans url (la chaine de connexion) remplacent éventuellement ceux passés via originalInfo...
    Citation Envoyé par fredgt Voir le message
    J'ai l'impression que ca n'a pas le même comportement, ce qui me semblerait logique. Mais ce qui m'interpelle par contre, c'est que pour une base j'avais cette erreur avec le paramètre "encoding=ISO8859_1" :
    org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544321. arithmetic exception, numeric overflow, or string truncation
    Cannot transliterate character between character sets

    J'avais donc fouillé sur les forums, et j'avais trouvé le paramètre suivant pour remplacer "encoding=ISO8859_1" : "ctype_none=ACP".

    Ca m'a résolu mon problème. Mais lorsque j'ai exécuté sur cette même base le programme avec la chaîne de connexion de mon collaborateur, je n'avais plus d'erreur !!!
    Cela n'a rien résolu du tout, ce paramètre est également ignoré...

    encoding=ISO8859_1 entraine la création des paramètres suivants :
    "isc_dpb_lc_ctype => ISO8859_1"
    "isc_dpb_local_encoding => ISO-8859-1"
    ctype_none=ACP n'entraine pas la création de paramètre, c'est complètement ignoré... comme "ISO8859_1" seul...
    Philippe.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci à vous 2 pour vos réponses.
    J'ai déjà pas mal lu les docs de Firebird sans trouver de réponse claire à mon problème.
    Je ne suis pas expert en Charset, merci pour toutes vos explications.

    Il semble évident de mettre parametre=valeur dans la chaine de connexion.

    Ce qui me semble par contre très étrange, c'est que j'ai un comportement différent lorsque je mets ISO8859_1 et ctype_none=ACP, alors que , Philippe, vous me dites que tous les 2 sont ignorés. Comment est-ce possible ?

    Exemple de lecture des données d'une table de livres.
    Dans le premier cas j'obtiens ceci :"BD COMICS ET IND�S"
    ou "BD COMICS ET IND???S"
    Dans le deuxieme cas, j'obtiens ceci : "BD COMICS ET INDÃ~IS"

    J'ai un 2eme programme qui lit mes fichiers avec les données extraites de ma base.
    Le programe converti le fichier lu en ISO8859-1. Seul le fichier créé avec le ctype_none=ACP est récupéré correctement avec les accents.

    Petit complément d'info, ma base est en Firebird 1.5.

    J'ai essayé tous les paramètres possibles pour la valeur encoding (ISO, UTF-8, ...). Ca n'a pas réglé mon problème.

    Merci d'avance pour vos réponses ;-)

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par fredgt Voir le message
    Ce qui me semble par contre très étrange, c'est que j'ai un comportement différent lorsque je mets ISO8859_1 et ctype_none=ACP, alors que , Philippe, vous me dites que tous les 2 sont ignorés. Comment est-ce possible ?
    Tracez l'exécution du programme et examinez les valeurs, vous verrez...
    Je vous ai cité les endroits précis du code à examiner.
    Citation Envoyé par fredgt Voir le message
    Exemple de lecture des données d'une table de livres.
    Dans le premier cas j'obtiens ceci :"BD COMICS ET IND�S"
    ou "BD COMICS ET IND???S"
    Dans le deuxieme cas, j'obtiens ceci : "BD COMICS ET INDÃ~IS"
    Comment se fait la connexion ? Passez vous des paramètres par Properties ?
    Par exemple:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Properties prop = new Properties();
    prop.setProperty("encoding", "UTF8");
    prop.setProperty("user", "MESS_SA");
    prop.setProperty("password", "mess_sa");
     
    Connection cnx = DriverManager.getConnection(
       "jdbc:firebirdsql:<IP>/3050:<BASE>?ctype_none=ACP",  // <= ?ctype_none=ACP est ignoré comme ?ISO8859_1!
       prop);
    Quel est le charset par défaut de la base ? du client ?
    D'autre part de mémoire, il me semble que ACP s'emploie avec ctype_user.
    Mais même cette valeur est ignorée (ctype_user=ACP)...
    Citation Envoyé par fredgt Voir le message
    J'ai un 2eme programme qui lit mes fichiers avec les données extraites de ma base.
    Ah ! Voila une information intéressante. N'est ce pas ici qu'est le problème ?
    Citation Envoyé par fredgt Voir le message
    Le programe converti le fichier lu en ISO8859-1. Seul le fichier créé avec le ctype_none=ACP est récupéré correctement avec les accents.
    Le fichier créé ? c'est à dire un fichier externe ? XML de surcroit ?
    Avec quoi vous le lisez ?
    Citation Envoyé par fredgt Voir le message
    Petit complément d'info, ma base est en Firebird 1.5.
    Il serait peut être temps de passer au moins à FB 2.1.5.
    FB 1.5 n'est plus supporté depuis belle lurette.

    Cela dit, j'ai testé avec FB 2.5.2 et Jaybird 2.2.2.
    Citation Envoyé par fredgt Voir le message
    J'ai essayé tous les paramètres possibles pour la valeur encoding (ISO, UTF-8, ...). Ca n'a pas réglé mon problème.
    Essayer des paramètres à l'aveugle ne me parait pas la meilleure approche.
    Philippe.

Discussions similaires

  1. [JDBC] Problème de connexion
    Par Pipo95 dans le forum JDBC
    Réponses: 7
    Dernier message: 11/07/2008, 23h14
  2. Connexion Jdbc, problème étrange
    Par GanYoshi dans le forum JDBC
    Réponses: 6
    Dernier message: 11/01/2008, 17h21
  3. Réponses: 7
    Dernier message: 26/04/2007, 14h21
  4. [JDBC]problème de connexion
    Par popov2 dans le forum JDBC
    Réponses: 15
    Dernier message: 28/12/2005, 15h24
  5. [JDBC] problème connexion à MS Access
    Par naz dans le forum JDBC
    Réponses: 7
    Dernier message: 03/10/2005, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo