Aller au contenu | Aller au menu | Aller à la recherche


Interclassement MySql : Charset et Collation

Depuis la version 4.1 de Mysql, les versions 5 ont proposent l'interclassement qu'il est parfois nécessaire de modifier suite à une migration ou récupération de bases de données. Voici comment passer toutes vos bases et tables de l'interclassement par défaut : latin1_swedish_ci en latin1_general_ci ou utf8_general_ci

Convertir ses champs de tables de bases MySQL d'un charset/collation vers un autre charset/collation

Avec les fichiers suivants, vous pourrez faire cette migration de charset pour toutes ou seulement les bases spécifiées :

Il vous faudra toute fois un compte MySql possédant suffisamment de droit pour modifier la structure de vos tables avec la commande MySql ALTER.

/**
 * Convertisseur de charset et collation pour Mysql
 * Préciser l'accès à votre base avec un utilisateur administrateur ayant accès au modifications de structures
 * Puis le charset et collation vous désirez utiliser pour toute les bases, tables et champs de votre serveur Mysql
 *
 * Auteur : http://dotclear.placeoweb.com
 * Blog : http://dotclear.placeoweb.com/post/MySql-interclassement
 */

Serveur: mysql. 5.0.22
requête SQL: SHOW CHARACTER SET;
Enregistrements: 36

Charset Description Default collation Maxlen
big5 Big5 Traditional Chinese big5_chinese_ci 2
dec8 DEC West European dec8_swedish_ci 1
cp850 DOS West European cp850_general_ci 1
hp8 HP West European hp8_english_ci 1
koi8r KOI8-R Relcom Russian koi8r_general_ci 1
latin1 cp1252 West European latin1_swedish_ci 1
latin2 ISO 8859-2 Central European latin2_general_ci 1
swe7 7bit Swedish swe7_swedish_ci 1
ascii US ASCII ascii_general_ci 1
ujis EUC-JP Japanese ujis_japanese_ci 3
sjis Shift-JIS Japanese sjis_japanese_ci 2
hebrew ISO 8859-8 Hebrew hebrew_general_ci 1
tis620 TIS620 Thai tis620_thai_ci 1
euckr EUC-KR Korean euckr_korean_ci 2
koi8u KOI8-U Ukrainian koi8u_general_ci 1
gb2312 GB2312 Simplified Chinese gb2312_chinese_ci 2
greek ISO 8859-7 Greek greek_general_ci 1
cp1250 Windows Central European cp1250_general_ci 1
gbk GBK Simplified Chinese gbk_chinese_ci 2
latin5 ISO 8859-9 Turkish latin5_turkish_ci 1
armscii8 ARMSCII-8 Armenian armscii8_general_ci 1
utf8 UTF-8 Unicode utf8_general_ci 3
ucs2 UCS-2 Unicode ucs2_general_ci 2
cp866 DOS Russian cp866_general_ci 1
keybcs2 DOS Kamenicky Czech-Slovak keybcs2_general_ci 1
macce Mac Central European macce_general_ci 1
macroman Mac West European macroman_general_ci 1
cp852 DOS Central European cp852_general_ci 1
latin7 ISO 8859-13 Baltic latin7_general_ci 1
cp1251 Windows Cyrillic cp1251_general_ci 1
cp1256 Windows Arabic cp1256_general_ci 1
cp1257 Windows Baltic cp1257_general_ci 1
binary Binary pseudo charset binary 1
geostd8 GEOSTD8 Georgian geostd8_general_ci 1
cp932 SJIS for Windows Japanese cp932_japanese_ci 2
eucjpms UJIS for Windows Japanese eucjpms_japanese_ci 3

Serveur: mysql. 5.0.22
requête SQL: SHOW COLLATION LIKE 'latin1%';
Enregistrements: 8

Collation Charset Id Default Compiled Sortlen
latin1_german1_ci latin1 5   Yes 1
latin1_swedish_ci latin1 8 Yes Yes 1
latin1_danish_ci latin1 15   Yes 1
latin1_german2_ci latin1 31   Yes 2
latin1_bin latin1 47   Yes 1
latin1_general_ci latin1 48   Yes 1
latin1_general_cs latin1 49   Yes 1
latin1_spanish_ci latin1 94   Yes 1

Serveur: mysql. 5.0.22
requête SQL: SHOW COLLATION LIKE 'utf8%';
Enregistrements: 21

Collation Charset Id Default Compiled Sortlen
utf8_general_ci utf8 33 Yes Yes 1
utf8_bin utf8 83   Yes 1
utf8_unicode_ci utf8 192   Yes 8
utf8_icelandic_ci utf8 193   Yes 8
utf8_latvian_ci utf8 194   Yes 8
utf8_romanian_ci utf8 195   Yes 8
utf8_slovenian_ci utf8 196   Yes 8
utf8_polish_ci utf8 197   Yes 8
utf8_estonian_ci utf8 198   Yes 8
utf8_spanish_ci utf8 199   Yes 8
utf8_swedish_ci utf8 200   Yes 8
utf8_turkish_ci utf8 201   Yes 8
utf8_czech_ci utf8 202   Yes 8
utf8_danish_ci utf8 203   Yes 8
utf8_lithuanian_ci utf8 204   Yes 8
utf8_slovak_ci utf8 205   Yes 8
utf8_spanish2_ci utf8 206   Yes 8
utf8_roman_ci utf8 207   Yes 8
utf8_persian_ci utf8 208   Yes 8
utf8_esperanto_ci utf8 209   Yes 8
utf8_hungarian_ci utf8 210   Yes 8

Passer en UTF8 sans changer la structure de la table

Sans changer le charset depuis la structure de la table,

ALTER TABLE `ma_table`  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
--ALTER TABLE `ma_table`  DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci ;

vous pouvez définir votre connecteur avec les options de charset en UT8, ou bien faire une première requête préalable qui

SET NAMES 'utf8'

Syntaxe de SET

SET NAMES {'charset_name' | DEFAULT}
 
SET NAMES spécifie les valeurs des trois VARIABLES systèmes de session character_set_client, character_set_connection et character_set_results avec le jeu de caractères donné.

Ressources

Autres tuto mysql php utf8

Commentaires

1. Le mardi, septembre 21 2010, 10:37 par Fabrice

Merci bcp pour ce script qui vient de me faire gagner un temps fou.

J'avais commencé à modifier chaque colonne une par une via PhpMyAdmin sur une base de 80 tables.

MERCI

2. Le mercredi, mai 25 2011, 09:33 par yesyes

Merci aussi, je tombe sur ton post via la 1ere page de google en cherchant "mysql changer interclassement"

je m'en suis servi pour http://shotonline.lafibre.org

t'es un chef !

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet