300 votes

Comment modifier la collation d'une base de données, d'une table ou d'une colonne ?

La base de données est latin1_general_ci et je veux changer la collation en utf8mb4_general_ci .

Existe-t-il un paramètre dans PhpMyAdmin permettant de modifier la collation de la base de données, de la table, de la colonne ? Plutôt que de changer une à une ?

4 votes

La réponse se trouve ici : stackoverflow.com/questions/5906585/

411voto

Nabeel Ahmed Points 356

J'apporte ma contribution, comme l'a demandé l'OP :

Comment modifier la collation d'une base de données, d'une table ou d'une colonne ?

La réponse sélectionnée l'indique simplement au niveau du tableau.


La modifier à l'échelle de la base de données :

ALTER DATABASE <database_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

La modification se fait par table :

ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

La bonne pratique consiste à le modifier au niveau de la table, car il le modifiera également pour les colonnes. La modification pour une colonne spécifique concerne un cas particulier.

Modification de la collation pour une colonne spécifique :

ALTER TABLE <table_name> MODIFY <column_name> VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

301voto

Quassnoi Points 191041

Vous devez convertir chaque tableau individuellement :

ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 

(cela convertira les colonnes tout aussi bien), ou exporter la base de données avec latin1 et le réimporter avec utf8mb4 .

20 votes

Mais je veux changer la collation des colonnes. Ceci ne changera que la collation de la table .

15 votes

@rsensan : CONVERT modifiera également la collation des colonnes.

26 votes

ALTER SCHEMA database DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci ;

69voto

hkasera Points 505

Vous pouvez exécuter un script php script.

               <?php
                   $con = mysql_connect('localhost','user','password');
                   if(!$con) { echo "Cannot connect to the database ";die();}
                   mysql_select_db('dbname');
                   $result=mysql_query('show tables');
                   while($tables = mysql_fetch_array($result)) {
                            foreach ($tables as $key => $value) {
                             mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
                       }}
                   echo "The collation of your database has been successfully changed!";
                ?>

52voto

jeeva Points 427

Pour modifier la collation pour les tables individuellement, vous pouvez utiliser,

ALTER TABLE mytable CONVERT TO CHARACTER SET utf8

Pour définir la collation par défaut pour l'ensemble de la base de données,

ALTER DATABASE  `databasename` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

ou autre,

Goto PhpMyAdmin->Opérations->Collation.

Vous y trouverez la boîte de sélection qui contient toutes les collations existantes. Vous pouvez donc changer de collation. Par la suite, la table de la base de données suivra cette collation lorsque vous créerez une nouvelle colonne. Il n'est pas nécessaire de sélectionner la collation lors de la création de nouvelles colonnes.

0 votes

Merci beaucoup, c'était utile

29voto

ParampalP Points 458

La requête suivante génère des requêtes ALTER qui modifient la collation de toutes les colonnes appropriées de toutes les tables en un certain type (utf8_general_ci dans mon exemple ci-dessous).

SELECT concat
        (
            'ALTER TABLE ', 
                t1.TABLE_SCHEMA, 
                '.', 
                t1.table_name, 
                ' MODIFY ', 
                t1.column_name, 
                ' ', 
                t1.data_type, 
                '(' , 
                    CHARACTER_MAXIMUM_LENGTH, 
                ')', 
                ' CHARACTER SET utf8 COLLATE utf8_general_ci;'
        )
from 
    information_schema.columns t1
where 
    t1.TABLE_SCHEMA like 'you_db_name_goes_here' AND
    t1.COLLATION_NAME IS NOT NULL AND
    t1.COLLATION_NAME NOT IN ('utf8_general_ci');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X