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

Requêtes MySQL Discussion :

Stockage de caractères accentués et ASCII (non imprimable)


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut Stockage de caractères accentués et ASCII (non imprimable)
    Bonjour,

    Je dois stocker dans une base mysql (5.0) des chaines de caractère contenant des caractères ASCII non imprimable et des caractère accentués.
    J'utilise une colonne VARCHAR avec un interclassement utf8_unicode_ci

    Les insertion fonctionnent bien (stockage de l'ASCII) si je n'ai pas d'accents dans ma chaine.
    Si elle comporte des accents, ces derniers sont bien stockés mais les caractère ASCII ne le sont pas. Que faire ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $chaine = 'Exemple de'.chr(29).'chaine';
    //Ceci est bien enregistré: Exemple de<29>chaine
     
    $chaine = 'Exemple de'.chr(29).'chaine accentée';
    //Ceci n'est pas bien enregistré: Exemple dechaine accentée
    //le caractre ascii 29 n'est pas stocké
    Note: les insertion se font en PHP

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Quel est le jeu de caractères de ta page ? Quelle est ta requête d'insertion ? Quel est le test qui te permet de dire que le caractère 29 est absent ?

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Quel est le jeu de caractères de ta page ?
    J'ai testé avec ma page encodée en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    Même résultat.

    Quelle est ta requête d'insertion ?
    La requête d'insertion est tout ce qu'il y'a de plus classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $chaine = 'Exemple de'.chr(29).'chaine';
    $sql = 'INSERT INTO tableTest (idtt, vals) VALUES (NULL, "'.$chaine.'")';
    mysql_query($sql);
    Quel est le test qui te permet de dire que le caractère 29 est absent ?
    J'ai un second programme qui vient lire ma table et transmet la chaine via un socket. Le programme client qui réceptionne cette chaine fait l'équivalent d'un explode() sur le carcactère 29. Sur une chaine ne comportant pas d'accents, l'explode() fonctionne. Ce n'est pas le cas si il y'a des accents.
    De plus, je visualise des [] (carrés) à la place des caractères non imprimables dans phpMyAdmin sur les chaine sans accents. Ce qui n'est pas le cas si j'insère la même chaine avec un caractère accentué en plus.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    qq part dans le php.ini, il y a un paramétrage du jeu de caractères du code PHP...

  5. #5
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Peux-tu me donner plus d'infos sur ce paramètre du php.ini ?

    Sinon j'ai tenter de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = 'INSERT INTO tableTest (idtt, vals) VALUES (NULL, CONCAT("Exemple de", CHAR(29), "chaine") )';
    $sql = 'INSERT INTO tableTest (idtt, vals) VALUES (NULL, CONCAT("Exemple de", CHAR(29), "chaine accentuée") )';
    Même problème, la 1ere insère bien mon caractère ASCII 29, la seconde l'ignore complètement et les accents sont bien inséré.

    Je ne comprend pas pourquoi l'ASCII ne passe pas. Dans tous les encodages, les 128 premiers caractères sont bien présent, non ?
    A la limite si il ne m'avait pas inséré les accents mais bien pris en compte l'ASCII j'aurais compris, mais là... je suis vraiment largué.
    HELP !

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par psychomatt Voir le message
    Peux-tu me donner plus d'infos sur ce paramètre du php.ini ?
    Non, parce que je n'en sais pas plus . Tu pourrais sans doute le retrouver en allant chercher du côté des forums PHP.

    Ceci dit, au vu de tes deux dernières requêtes, le problème est bien dans MySQL et donc dans le passage de PHP à MySQL. Peux-tu les essayer avec ça ?

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Peux-tu les essayer avec ça ?
    Pas de changement, même comportement
    J'ai également testé CHAR(29 USING latin1) en modifiant au préalable ma colonne en latin1_swedish_ci vu que mes pages web sont en ISO-8859-1, même galère.

    Ce qui me fait dire que le problème vient de MySQL uniquement. Je vais donc concentrer mes recherche là dessus maintenant.


    Est-ce que celà peut te donner des idées ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    > SHOW VARIABLES LIKE 'char%' 
     
    Variable_name 	          Value
    character_set_client 	  utf8
    character_set_connection  utf8
    character_set_database 	  latin1
    character_set_filesystem  binary
    character_set_results     utf8
    character_set_server 	  latin1
    character_set_system 	  utf8
    character_sets_dir 	  C:\Program Files\MySQL\MySQL Server 5.0\share\char...
    En tous cas merci pour tes suggestions, ça fait (un peu ) avancer les choses

  8. #8
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par psychomatt Voir le message
    Ce qui me fait dire que le problème vient de MySQL uniquement. Je vais donc concentrer mes recherche là dessus maintenant.
    yes. Le CHAR(29) est généré par MySQL et doit rentrer dans la colonne, PHP n'intervient pas là-dedans...

    Citation Envoyé par psychomatt Voir le message
    Est-ce que celà peut te donner des idées ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    > SHOW VARIABLES LIKE 'char%' 
     
    Variable_name 	          Value
    character_set_client 	  utf8
    character_set_connection  utf8
    character_set_results     utf8
    ça veut dire que ta page PHP est considérée comme de l'utf8 par MySQL, qu'elle transmet ses requêtes en utf8 et reçoit le résultat en utf8.

    Je pense qu'il merdouille dans la détermination du jeu de caractères de la concaténation. On va lui tenir la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO tableTest (vals) 
    VALUES (CONCAT(_utf8'Exemple de', CHAR(29 using utf8), _utf8'chaine') );
    INSERT INTO tableTest (vals) 
    VALUES (CONCAT(_utf8'Exemple de', CHAR(29 using utf8), _utf8'chaine accentuée') )

  9. #9
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Lui tenir la main n'a pas empêché qu'il se fasse renverser par une voiture qui passait pas là .
    Même résultat

    Je sèche.

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    J'ai fait le test sur le serveur MySQL de Free. J'avais le même problème que toi, aussi bien avec la chaîne accentuée qu'avec la chaîne non-accentuée. Utiliser les introducteurs _utf8 a réglé le problème...

    Pour toi, peux-tu essayer de passer la colonne en BLOB ou TINYBLOB ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/06/2011, 17h54
  2. Caractères affichés comme non-imprimables
    Par Shugo78 dans le forum GTK+ avec C & C++
    Réponses: 15
    Dernier message: 13/06/2007, 14h28
  3. Imprimer les caractères accentués
    Par Thrystan dans le forum Debian
    Réponses: 1
    Dernier message: 05/06/2007, 17h13
  4. caractères non imprimables
    Par floflo_2006 dans le forum C
    Réponses: 6
    Dernier message: 11/09/2006, 10h17
  5. [CR] envoyer un caractère non imprimable
    Par nnj dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/07/2004, 08h56

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