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

Import/Export Oracle Discussion :

ASCII vers UTF-8 via DBLINK


Sujet :

Import/Export Oracle

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut ASCII vers UTF-8 via DBLINK
    Bonjour,

    J'ai une base en ASCII, et une autre en UTF-8.
    Je copie une table de la permière vers la deuxième via un dblink du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE_UTF8 ( MONCHAMP ) SELECT MONCHAMP FROM DBLINK.TABLE_ASCII
    Problème, dans le champs de la table source ascii j'ai un 'é', codé sur 1 octet 0xE0.
    Dans ma seconde table, au lieu de me le convertir en UTF-8 sous la forme 0xC3A9 (2 octets représentant le 'é' en UTF-8), il me le converti en 0xEFBFBD (15712189 en décimal) et me le représente comme un carré dans SQLDevelopper.

    J'ai essaye UNISTR(), CONVERT() mais rien n'y fait.

    Une recherche de '15712189' sous Google donne plein de résultats mais pas de réponse à ce problème.

    Avez_vous une idée ?

    Cordialement.

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Informations complèmentaires
    Re,

    Pour info je suis en:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
    Mais le problème est identique en;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_LANG=FRENCH_FRANCE.AL32UTF8
    Ce qui serait normal d'après:

    http://www.oracle.com/technology/tec...lang%20faq.htm

    car ils dient:

    The NLS_LANG on the server (or client) has no influence on character set conversion through a database link.
    et les requètes suivantes donnent:

    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
    select chr(15712189) as caractere from dual;
     
    CARACTERE 
    --------- 
    �         
     
    1 rows selected
     
    select chr(50089) as caractere from dual;
     
    CARACTERE 
    --------- 
    é         
     
    1 rows selected
    Bon chez moi le � (et#65533point_virgule) est représenté par un carré dans SQL Developper...

    Cordialement.

  3. #3
    En attente de confirmation mail
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Points : 230
    Points
    230
    Par défaut
    Tu utilises des varchar2 ou des nvarchar2 en type de données ? Et en mode char ou byte ?

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut type de champs
    Bonjour,

    J'utilise des VARCHAR2(xx char) sinon j'ai des dépassements de longueur de chaine de caractère car en bytes oracle n'utilise qu'un octet par caractère.

    Cordialement.

  5. #5
    En attente de confirmation mail
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Points : 230
    Points
    230
    Par défaut
    Tu pourrais nous faire voir un exemple de ce que tu as tenté avec la fonction convert avec le résultat ?

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Solution alternative
    Re,

    J'ai trouvé une solution, mais pas top, à savoir:

    - Recreer la table source ASCII sur le serveur UTF-8 en remplacant les varchar(XX byte) par varchar(xx char)

    - Exporter avec exp la table de la base ASCII en positionnant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_LANG=AMERICAN_AMERICA.US7ASCII
    - Modifier le fichier dump en remplacant le 3eme octet de 0x01 en 0xb2, en effet le deuxieme et troisieme octet du fichier dump correspond à l'encodage, on change donc 0x0001 (US7ASCII) en 0x00b2 (WE8MSWIN1252)

    - importer avec inp dans "le clone" de la table de la base ASCII recréer sur la base UTF-8 en positionnant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
    Et la je retrouve bien mes caractères accentués encodés en UTF8 ( 'é' = 50089 ).

    Cordialement.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 272
    Points : 166
    Points
    166
    Par défaut Patch dump
    Re,

    Juste pour ceux que cela interresse un script Perl pour patcher le fichier DUMP expliqué précédemment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl
    open my $fichier, '+<', "sauvegarde.dmp" or die "Impossible d'ouvir le fichier!\n";
    my $octet;
    seek( $fichier, 2, 0 );
    syswrite( $fichier, chr(hex("B2")) ) == 1 or die "Erreur d'ecriture!\n";
    close $fichier or die "Erreur de fermeture!\n";
    Cordialement.

Discussions similaires

  1. Conversion texte Ascii vers Image ou Pdf
    Par davydreyAXESS dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2006, 15h45
  2. INSERT/UPDATE via DBLink
    Par Wilk dans le forum Oracle
    Réponses: 1
    Dernier message: 15/03/2006, 14h51
  3. problème d'encoding UTF-8 via la SDK MSXML
    Par ep31 dans le forum MFC
    Réponses: 6
    Dernier message: 26/01/2006, 09h46
  4. conversion ASCII vers EBCEDIC
    Par Mü dans le forum C++Builder
    Réponses: 1
    Dernier message: 04/12/2005, 19h06
  5. Conversion vers UTF-8
    Par magnus2005 dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2005, 10h12

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