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

OVH Discussion :

Migration de base de données ?


Sujet :

OVH

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut Migration de base de données ?
    Bonjour

    Je suis passé il y a quelques temps à la version suivante du php. Il y du se passer une chose équivalente avec ma base de données MySQL.
    Mon problème, c'est que le prénom de mon père est passé de André à André avec un affichage unicode sous firefox.

    Si je regarde le code php du phpMyAdmin d'ovh, j'ai bien ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta charset="utf-8" />
    Par contre, quand je regarde l'état de la base de données, elle me dit qu'elle est en latin1_swedish_ci et firefox ne me propose pas cet affichage dans la liste de choix

    Mais, le problème, c'est que lorsque j'utilise la base de donnée dans un programme php, j'arrive à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like''
    Que faire ? Peut-on changer le codage d'une bd sans perdre les données ? Le programme qui marchait avant affiche maintenant André, comme phpMyAdmin. Ce programme est aussi prévu pour être en UTF-8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    Dernière idée : si je rajoute en début est-ce bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="utf-8"?>
    Dernier commentaire : pas bon...
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    c'est peut-être l'encodage par défaut de la bibliothèque PHP qui changé
    essayez une des 2 requêtes suivantes juste après la connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET NAMES 'latin1'
    SET NAMES 'utf8'

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Ma remarque est peut-être idiote (c'est l'heure d'aller se coucher !), mais "SET NAME" intervient sur les noms, pas les valeurs des champs. J'aurais un problème au niveau d'un nom ! Alors qu'ils sont en anglais ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Membre expérimenté Avatar de nathieb
    Homme Profil pro
    DevOps
    Inscrit en
    Mai 2004
    Messages
    1 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 058
    Points : 1 532
    Points
    1 532
    Par défaut encodage de la base
    Bonjour,

    Il faut ré-encoder la base de donnée puisque tu connais l'encodage d'origine,
    et de tout passer en UTF 8, je te propose un lien
    http://renan-gautier.fr/articles/re-...nnees-en-utf8/

    Cordialement olivier
    Architecte destructurant,
    be cool, be free

    Il nous reste Debian bien sûr

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Et quand le serveur est distant ? je ne trouve pas l'option pour aller vers un serveur distant.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par troumad Voir le message
    "SET NAME" intervient sur les noms, pas les valeurs des champs.
    je ne suis pas sur de comprendre là, on parle bien d'une base MySQL ?
    https://dev.mysql.com/doc/refman/5.7/en/set-names.html

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    J'ai enfin un peu de temps pour regarder tout ceci...

    Une sauvegarde en iso me donne ceci en lecture (iso sélectionné naturellement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1, 'I9', 0, 'NAME', 'SIAUD,ANDR�', 'André Siaud', 'Siaud, André', 'Siaud', 'SIAUD', 'André', '''A536''', '''S300''', '''063900''', '''430000'''),
    Si je force un affichage en utf8, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1, 'I1863', 0, 'NAME', 'SIAUD,ANDR?', 'André Siaud', 'Siaud, André', 'Siaud', 'SIAUD', 'André', '''A536''', '''S300''', '''063900''', '''430000'''),
    J'ai les accents sur les minuscules accentuées, pas les majuscules.

    Alors que la sauvegarde naturelle donne (utf sélectionné naturellement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1, 'I9', 0, 'NAME', 'SIAUD,ANDRÉ', 'André Siaud', 'Siaud, André', 'Siaud', 'SIAUD', 'André', '''A536''', '''S300''', '''063900''', '''430000'''),
    En forçant un affichage en ISO, c'est encore pire.

    À la fin de chaque création de table, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    J'ai comme l'impression qu'il y a eu une migration de la base d'iso vers utf et pas complète...

    Voici l'erreur qui doit géner mon père dans le site lors de ses recherches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'' in /home/XXXXXXXX/includes/classes/class_pgv_db.php:835 Stack trace:
    #0 [internal function]: PDOStatement->execute()
    #1 /home/XXXXXX/includes/classes/class_pgv_db.php(835): call_user_func_array(Array, Array)
    #2 /home/XXXXXX/includes/classes/class_pgv_db.php(850): PGV_DBStatement->__call('execute', Array)
    #3 /home/XXXXXX/includes/classes/class_pgv_db.php(850): PGV_DBStatement->execute()
    #4 /home/XXXXXX/includes/functions/functions_db.php(486): PGV_DBStatement->__call('fetchAll', Array)
    #5 /home/XXXXXX/includes/functions/functions_db.php(486): PGV_DBStatement->fetchAll()
    #6 /home/XXXXXX/famlist.php(208): get_famlist_surns('', 'S', false, '1')
    #7 {main} thrown in /home/XXXXXX/includes/classes/class_pgv_db.php on line 835
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par troumad Voir le message
    Alors que la sauvegarde naturelle donne (utf sélectionné naturellement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (1, 'I9', 0, 'NAME', 'SIAUD,ANDRÉ', 'André Siaud', 'Siaud, André', 'Siaud', 'SIAUD', 'André', '''A536''', '''S300''', '''063900''', '''430000'''),
    là vous avez bien vos accents, le résultat que vous avez est de l'UTF-8 affiché comme du Latin-1
    donc il suffit de l'afficher comme de l'UTF-8 pour avoir vos données correctes

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Mais les majuscules accentuées ne marchent pas

    Le plus surprenant, j'ai oublié de le dire, c'est que la copie de la ligne où les minuscules sont accentuées ne marche pas : j'ai du m'y prendre à deux reprise : avant le '?' d'interrogation qui remplace le É et après, la ligne complète s'arrêtait au '?'...
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  10. #10
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    J'ai modifié à la main les lettres accentuées (fonction remplacer d'un éditeur de texte) et j'ai mis la nouvelle base de données à la place de l'ancienne : j'ai récupéré les accents.

    Ensuite, pour corriger l'erreur, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `pgv4_2_name` CHANGE `n_id` `n_id` VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, CHANGE `n_surname` `n_surname` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `n_surn` `n_surn` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `n_givn` `n_givn` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `n_soundex_givn_std` `n_soundex_givn_std` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `n_soundex_surn_std` `n_soundex_surn_std` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `n_soundex_givn_dm` `n_soundex_givn_dm` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, CHANGE `n_soundex_surn_dm` `n_soundex_surn_dm` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
    Mais, j'aimerai remplacer dans toutes les tables les "latin1 COLLATE latin1_swedish_ci" par des "utf8 COLLATE utf8_general_ci". Est-ce faisable automatiquement ? Je ne sais pas du tout 'où peuvent venir ces "latin1 COLLATE latin1_swedish_ci"...

    Il me reste ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2006 MySQL server has gone away' in /home/XXXXXX/includes/classes/class_pgv_db.php:837 Stack trace:
    #0 [internal function]: PDOStatement->execute(Array) 
    #1 /home/XXXXXX/includes/classes/class_pgv_db.php(837): call_user_func_array(Array, Array)
    #2 /home/XXXXXX/includes/functions/functions_db.php(2704): PGV_DBStatement->__call('execute', Array)
    #3 /home/XXXXXX/includes/functions/functions_db.php(2704): PGV_DBStatement->execute(Array) #4 /home/XXXXXX/includes/authentication.php(147): get_user_name('1')
    #5 /home/XXXXXX/includes/authentication.php(314): getUserName()
    #6 /home/XXXXXX/includes/functions/functions.php(502): AddToLog('ERROR 2: PDOSta...')
    #7 [internal function]: pgv_error_handler(2, 'PDOStatement::e...', '/home/XXX...', 837, Array)
    #8 [internal function]: PDOStatement->execute()
    #9 /home/XXXXXX/includes/classes/class_pgv_db.php(837): call in /home/XXXXXX/includes/classes/class_pgv_db.php on line 837
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/05/2011, 17h28
  2. Réponses: 0
    Dernier message: 23/11/2009, 12h38
  3. probleme de migration de base de donnée
    Par maxeur dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 14/01/2008, 09h37
  4. Migration de bases de données de My SQL vers SQL Server 2005
    Par thvphan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/04/2006, 13h34
  5. Migration de Base de données SQLServer -> Oracle
    Par karamazov994 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 14h30

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