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

PHP & Base de données Discussion :

latin1 -> utf-8 migration [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Par défaut latin1 -> utf-8 migration
    Bonjour,

    Je dois migrer les données d'une base latin_german_ci vers une base utf8_unicode_ci. Le fichier d'importation créé est en utf-8. L'importation est réalisée avec succès en local.
    Donc j'ai l'ancienne base dont les données ont été passées correctement en utf-8 (résultat dans la db et dans un affichage web).

    Pour la migration de l'ancienne vers la nouvelle base, Je fais un SELECT sur l'ancienne base, récupérées les données sont traitées par PHP et je réinsère dans la nouvelle base.

    Voici la configuration de mon serveur :
    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
    16
    SELECT _utf8'é', _latin1'é', ORD(_utf8'é'), ORD(_latin1'é') ;
    Résultats :
    é 	é 	ORD(_utf8'é') 	ORD(_latin1'é')
    é 	é 	50089 	        195
    ***************************************************
    SHOW VARIABLES LIKE '%char%';
    résultats:
    Variable_name 	Value
    character_set_client 	utf8
    character_set_connection 	utf8
    character_set_database 	utf8
    character_set_filesystem 	binary
    character_set_results 	utf8
    character_set_server 	latin1
    character_set_system 	utf8
    character_sets_dir 	c:\wamp\mysql\share\charsets\
    Mes pages php sont enregistrées dans le format utf-8, la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    est déclarée et ma première requête spécifie le format des données traitées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SET NAMES 'UTF8'");
    Bref, je crois que tout y est et pourtant...

    Voici ce que me donne une requête d'insertion tel que je l'envoie dans ma nouvelle base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO aff_adresse (fk_id_iso,rue,num,bte,cp,localite,commune,province,pays,date_creation,date_update) VALUES ( '5', 'rue du march�', '10', '', '7100', '', 'LA LOUVIÈRE', 'Hainaut', 'BE', '0000-00-00 00:00:00', '2007-11-13 10:27:03' )
    le 'é' de 'rue du marché' est remplacé par � mais pourtant la localité qui comprend un accent est correcte!

    Je ne vois pas d'où cela peut venir... Qqun pour une idée?

    Deuxième question : existe t'il une fonction me permettant de connaître le type d'encodage utilisé pour un mot?

    Troisième question : quelle différence y a t'il entre utf8_unicode_ci et utf8_general_ci???

    Merci déjà à tous ceux qui participeront à ce post!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    utf8_general_ci Unicode (multilingue), insensible à la casse
    utf8_unicode_ci Unicode (multilingue), insensible à la casse
    Pour le reste, tu n'insères pas "rue du marché" mais "rue du march�" alors que les autres champs sont corrects

    Bon courage pour ces problemes d'encodage et d'accent, parce que je me suis déjà moi meme suicidé cent fois sur le sujet.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre chevronné Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pour le reste, tu n'insères pas "rue du marché" mais "rue du march�" alors que les autres champs sont corrects

    Bon courage pour ces problemes d'encodage et d'accent, parce que je me suis déjà moi meme suicidé cent fois sur le sujet.
    j'insère "rue du march�" ??? mais cette donnée provient d'un fichier encodé utf-8 qui a été importé dans une base en utf-8 et traitée par des fichiers php en utf-8...

    Et comment se fait-il qu'un SELECT sur l'ancienne base (même serveur, même config d'encodage) me donne "rue du marché"?

    Selon toi pas de différence entre unicode et general pour l'utf-8???

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Non et de toute facon les infos d'interclassement servent pour les opération de comparaison et de classement des données.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre chevronné Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Par défaut
    Bon voilà, je ne me suis pas suicidé, je ne pouvais pas avant d'avoir trouvé la solution

    En fait, tout mon raisonnement de migration est correct et tout se passe très bien. Sauf dans le traitement de migration php d'une base à l'autre. En effet, la fonction strtolower me renvoie la chaîne encodée ISO.

    Solution : Utilisation de la fonction : mb_strtolower()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $foo = mb_strtolower($foo,"UTF-8");
    Encore une fois, la vérité se trouve dans ma signature...

  6. #6
    Membre chevronné Avatar de defcon_suny
    Homme Profil pro
    Non pas trop...
    Inscrit en
    Décembre 2006
    Messages
    441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Non pas trop...
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 441
    Par défaut
    Bon et bien ceci me dit que certains mots sont enregistrés en iso et d'autres en utf-8...
    Si la page affiche des caractères de ce type : "�"
    => Les données ont été enregistrées au format ISO, et le navigateur les affiche en pensant avoir affaire à de l'UTF-8.
    http://electron-libre.fassnet.net/utf8.php
    ... Le problème, c'est que ces mots proviennent de la même table dont chaque colonne est enregistrée dans le même format utf8_unicode_ci. Bref c'est encore plus obscure...

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

Discussions similaires

  1. Requête UTF-8 vers base MySQL 4.0 Latin1
    Par sebasc dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/03/2011, 15h28
  2. diff sur deux fichiers encodés latin1 et UTF-8
    Par noooop dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 02/02/2010, 14h14
  3. Migration de character Set (WE8ISO8859P1 vers UTF-8)
    Par fouad77fr dans le forum Administration
    Réponses: 2
    Dernier message: 17/12/2008, 14h13
  4. Migration ISO-8859-1 -> UTF-8
    Par HurtMarley dans le forum SQL
    Réponses: 7
    Dernier message: 02/11/2007, 09h09
  5. Migration base Oracle ISO >> UTF-8
    Par psujet dans le forum Oracle
    Réponses: 1
    Dernier message: 31/12/2005, 19h23

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