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

Administration Oracle Discussion :

Erreurs de conversion


Sujet :

Administration Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Erreurs de conversion
    Bonjour,

    Dans un projet, je suis amené à sélectionner des données dans oracle (serveur distant) et puis les injecter dans une base mysql (serveur local). Dans la base oracle, on a des données en français et en arabe, avec le paramétrage suivant :

    NLS_LANGUAGE FRENCH
    NLS_TERRITORY FRANCE
    NLS_CURRENCY ?
    NLS_ISO_CURRENCY FRANCE
    NLS_NUMERIC_CHARACTERS ,.
    NLS_CHARACTERSET WE8ISO8859P9
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD/MM/YY
    NLS_DATE_LANGUAGE FRENCH
    NLS_SORT FRENCH
    NLS_TIME_FORMAT HH24:MI:SSXFF
    NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
    NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
    NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
    NLS_DUAL_CURRENCY ?
    NLS_COMP BINARY
    NLS_LENGTH_SEMANTICS BYTE
    NLS_NCHAR_CONV_EXCP FALSE
    NLS_NCHAR_CHARACTERSET AL16UTF16
    NLS_RDBMS_VERSION 9.2.0.4.0

    Dans la machine locale, quand j'utilise UTF8, les caractères accentués s'affichent correctement, contrairement au caractères arabes (ÏÈáæã). J'ai aussi testé AMERICAN_AMERICA.WE8ISO8859P9, alors là toutes les données s'affichent correctement dans le navigateur (modulo le changement d'encodage en windows-1256). Par contre, lorsque je lance l'enregistrement de ces données dans mysql, je reçois cette erreur :


    SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF4me EN...' for column 'lic_dip' at row 1


    ça fait maintenant une semaine que je m'arrache les cheveux avec ce problème de conversion. Merci à toute personne pouvant m'éclairer sur ce problème.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous devriez préciser l'environnement client de connexion, donc si j'ai bien compris l'environnement serveur mysql :
    L'OS et le mode de connexion (l'outil utilisé)

    En attendant regardez :
    Evitez les erreurs de conversion grâce aux NLS

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Plus de détails
    Bonjour,

    Merci pour votre réponse. Sur la machine locale y a ubuntu 16.04 et mysqlnd 5.0.12-dev. J'ai installé oci8 pour pouvoir accéder à la base oracle. Je vous informe aussi que le type d'encodage utilisé dans oracle est WE8ISO8859P9 (comme vous pouvez le voir dans mon premier message). Le même type d'encodage est utilisé dans les machines Windows qui se connectent à la base oracle. Apparemment, malgré que WE8ISO8859P9 supporte l'arabe, il ne convient pas. En effet, si utf-8 est utilisé dans le client, oracle ne vas pas faire correctement la conversion de WE8ISO8859P9 vers utf-8.

    Sachant qu'on ne peut pas modifier la configuration de la base oracle, et du fait j'arrive à afficher les données sélectionnées (en arabe) dans le navigateur ( windows-1256), je voudrais savoir est ce qu'il y a moyen de convertir ces données avec php (ou autre) afin de les injecter correctement dans la base. Je vous remercie d'avance.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Si je récapitule ce que je comprends, ça donne :
    - Vous avez une base Oracle avec du français et de l'arabe
    - Cette base est fonctionnelle, pas de corruption des donnés
    - Vous avez développez un script php qui se connecte à la base Oracle via OCI8 et récupère les bonnes valeurs après modification en AMERICAN_AMERICA.WE8ISO8859P9
    - Vous n'arrivez pas à insérer les données dans mysql, vous avez un message d'erreur : SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF4me EN...' for column 'lic_dip' at row 1

    Comment insérez-vous les données, utilisez-vous une requête préparée ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Vous avez bien décrit la situation. J'ai essayé plusieurs types d'encodage coté MySql, mais ça ne fonctionne toujours pas.

Discussions similaires

  1. Erreur de conversion
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2005, 11h14
  2. Erreur de conversion
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/08/2005, 16h23
  3. Erreur de conversion et requête dynamique dans une procédure
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/08/2005, 15h12
  4. Erreur de conversion de type Null en String
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/07/2005, 15h25
  5. Erreur de conversion int to socklen_t
    Par def_jam_vendetta dans le forum C++
    Réponses: 6
    Dernier message: 04/03/2005, 10h53

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