Interclassement MySql : Charset et Collation
Par PlaceOweb le jeudi, juin 14 2007, 12:35 - SQL - Lien permanent
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 :
- mysql_latin1_swedish_ci_VERS_latin1_general_ci.php
- mysql_anyCharsetAndCollation_VERS_anyCharsetAndCollation.php
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
- Jeux de caractères et collation dans MySQL SHOW CHARACTER SET ; SHOW COLLATION ;
- Jeux de caractères et collations de connexion SET NAMES 'charset_name' ;
- Support de Unicode utf8, l'encodage UTF-8 du jeu de caractères Unicode. Conseil : pour économiser de l'espace avec UTF-8, utilisez VARCHAR au lieu de CHAR.
- Unicode Support MySQL uses no BOM for UTF-8 values.
Commentaires
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
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 !