Nettoyer une base données MySQL

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par renaud63, 13 Novembre 2014.

  1. renaud63
    renaud63 WRInaute discret
    Inscrit:
    30 Septembre 2006
    Messages:
    50
    J'aime reçus:
    0
    Bonjour à tous,

    J'hérite de la gestion d'un site dont la BDD a été mal encodée. Base et tables étaient en utf8_general_ci, et des données 8859-1 ont été importées. Enfin je pense. Toujours est-il que le mot "téléphone" est visible dans PHPmyAdmin comme "téléphone".
    Je souhaite donc nettoyer ces données pour les ré-insérer correctement.
    Je précise que la base est très chargée en textes.

    J'ai tenté :
    - Export 8859-1 puis encodage UTF-8 dans Notepad++ : De nombreux caractères échappent à l'encodage ou se transforment en signes chinois. Du coup l'import plante.
    - Export UTF-8 et passage par Notepad : mais du coup c'est déjà détecté UTF8 et l'encodage ne fonctionne pas. Essayé ->AINSI puis -> re UTF-8. Pourri.
    - Passage par PHP avec utf8_encode et decode, iconv dans les deux sens. Nada.
    - Toujours via PHP un str_replace avec 2 arrays, un avec tous les caractères mal encodés, un autre avec leur équivalent "français". C'est le mieux, mais assez aléatoire, sans doute que mes tableaux ne sont pas complets...

    Bref, si vous avez déjà été confronté à ce problème, je veux bien quelques tuyaux.
    Merci d'avance et bonne journée.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 809
    J'aime reçus:
    242
    Latin1 to UTF8
    Code:
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
    Nothing else.
     
  3. renaud63
    renaud63 WRInaute discret
    Inscrit:
    30 Septembre 2006
    Messages:
    50
    J'aime reçus:
    0
    Ca ne change rien : la table est déjà en UTF-8. Les données seules sont mal encodées.
    Merci quand même.
     
  4. salva
    salva WRInaute accro
    Inscrit:
    16 Avril 2006
    Messages:
    3 577
    J'aime reçus:
    0
    Pour les tables concernées si tu n'en as pas des wagons.
    Code:
    update la_table
    set le_champ = replace(le_champ, 'cractere_à_virer', 'nouveau_caractere')
    Ça fonctionne pas ?
     
  5. renaud63
    renaud63 WRInaute discret
    Inscrit:
    30 Septembre 2006
    Messages:
    50
    J'aime reçus:
    0
    J'ai fait ça, sur le fichier SQL d'export phpMyAdmin (exporté UTF8) mais plein de caractères pourris, à partir d'un file_get_contents et un foreach ligne à ligne :

    Code:
    function NettoieBase($str=""){
    $bad = array('À','Á','Â','Ã','Ä','Ã…','Æ','Ç','È','É','Ê','Ë','ÃŒ','Í','ÃŽ','Ï','Ð','Ñ','Ã’','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ãœ','Ý','ß','à ','á','â','ã','ä','Ã¥','æ','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ','Ä€','ā','Ä‚','ă','Ä„','Ä…','Ć','ć','Ĉ','ĉ','ÄŠ','Ä‹','ÄŒ','č','ÄŽ','ď','Đ','Ä‘','Ä’','Ä“','Ä”','Ä•','Ä–','Ä—','Ę','Ä™','Äš','Ä›','Äœ','ĝ','Äž','ÄŸ','Ä ','Ä¡','Ä¢','Ä£','Ĥ','Ä¥','Ħ','ħ','Ĩ','Ä©','Ī','Ä«','Ĭ','Ä­','Ä®','į','Ä°','ı','IJ','ij','Ä´','ĵ','Ķ','Ä·','Ĺ','ĺ','Ä»','ļ','Ľ','ľ','Ä¿','Å€','Ł','Å‚','Ń','Å„','Å…','ņ','Ň','ň','ʼn','ÅŒ','ō','ÅŽ','ŏ','Ő','Å‘','Å’','Å“','Å”','Å•','Å–','Å—','Ř','Å™','Åš','Å›','Åœ','ŝ','Åž','ÅŸ','Å ','Å¡','Å¢','Å£','Ť','Å¥','Ŧ','ŧ','Ũ','Å©','Ū','Å«','Ŭ','Å­','Å®','ů','Å°','ű','Ų','ų','Å´','ŵ','Ŷ','Å·','Ÿ','Ź','ź','Å»','ż','Ž','ž','Å¿','Æ’','Æ ','Æ¡','Ư','Æ°','Ǎ','ÇŽ','Ǐ','ǐ','Ç‘','Ç’','Ç“','Ç”','Ç•','Ç–','Ç—','ǘ','Ç™','Çš','Ç›','Çœ','Ǻ','Ç»','Ǽ','ǽ','Ǿ','Ç¿','n°','Ã','’','º','ÿ','à');
    $good =  array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð',
                    'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã',
                    'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ',
                    'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ',
                    'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę',
                    'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī',
                    'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ',
                    'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ',
                    'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 
                    'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 
                    'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ',
                    'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ','N°','à',"\''",'N°','Ê',' à');
    
    return str_replace($bad, $good, $str);	
    }
    
    Ca en nettoie beaucoup, mais pas tout, hélas. Et quand je réimporte, ça plante. Je fais ça sous windows, pas essayé sur le serveur linux. Je n'ai pas trouvé de tableau plus complet des caractères mal encodés. J'ai tenté d'écrire une fonction qui parserait le fichier moisi à la recherche de tous les caractères mal encodés pour générer un tableau $bad...mais galère.
    
     
  6. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    707
    J'aime reçus:
    0
    Regarde du coté de iconv.
    C'est pour moi la meilleur fonction pour la conversion d'encodage.

    Exemple :
    PHP:
    <span class="syntaxdefault"><br />setlocale</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">LC_CTYPE</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'fr_FR.UTF-8'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">echo iconv</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ISO-8859-15'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'UTF-8'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Chaîne de caractères à convertir.'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span>
     
  7. renaud63
    renaud63 WRInaute discret
    Inscrit:
    30 Septembre 2006
    Messages:
    50
    J'aime reçus:
    0
    Oui, j'ai testé iconv mais cela ne change rien, car je pense que le fichier est en déjà UTF8 (cela est dit dans notepad / encodage). utf8_decode serait ce qui fonctionne le mieux, mais beaucoup de caractères pourris sont omis et plantent à l'import phpMyAdmin. Je cherchais donc quelque chose de plus pointu...
     
Chargement...
Similar Threads - Nettoyer base données Forum Date
Nettoyer les liens "pirates" de Google Débuter en référencement 21 Juin 2019
Nettoyer les 404s de bots près migration URL Rewriting et .htaccess 19 Mai 2018
Actions pour "nettoyer" un site...votre avis ? Problèmes de référencement spécifiques à vos sites 2 Janvier 2018
Nettoyer un fichier .htacces qui est trop gros URL Rewriting et .htaccess 18 Avril 2017
Nettoyer un très grand nombre d'URL sortantes Développement d'un site Web ou d'une appli mobile 22 Mai 2014
nettoyer les différents avis Problèmes de référencement spécifiques à vos sites 2 Avril 2014
Nettoyer les liens sortant de mon site Débuter en référencement 16 Avril 2013
Nettoyer un numéro de téléphone avant INSERT Développement d'un site Web ou d'une appli mobile 17 Février 2012
Cherche à nettoyer ma BDD mysql Administration d'un site Web 2 Décembre 2011
Nettoyer les pages des résultats de Google Référencement Google 9 Juin 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice