Il existe une MySQL table
dont la définition est extraite de SQLYog Enterprise
:
Table Create Table
----------------- ---------------------------------------------------------
etape_prospection CREATE TABLE `etape_prospection` (
`etape_prosp_id` int(10) NOT NULL AUTO_INCREMENT,
`type_prosp_id` int(10) NOT NULL DEFAULT '0',
`prosp_id` int(10) NOT NULL DEFAULT '0',
`etape_prosp_date` datetime DEFAULT NULL,
`etape_prosp_comment` text,
PRIMARY KEY (`etape_prosp_id`),
KEY `concerne_fk` (`prosp_id`),
KEY `de_type_fk` (`type_prosp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
Je veux changer le default charset
de cette table de latin1
à utf8
. Comment faire ça ?
Si vous souhaitez modifier la table default character set
et toutes les colonnes de caractères en un nouveau jeu de caractères, utilisez une instruction comme celle-ci:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
Donc la requête sera:
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8;
Changer le jeu de caractères par défaut de la table:
ALTER TABLE etape_prospection
CHARACTER SET utf8,
COLLATE utf8_general_ci;
Pour changer le jeu de caractères de colonne string, exceute cette requête:
ALTER TABLE etape_prospection
CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci;
La commande ALTER TABLE
MySQL devrait faire l'affaire. La commande suivante modifiera le jeu de caractères par défaut de votre table et le jeu de caractères de toutes ses colonnes en UTF8.
ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Cette commande convertira toutes les colonnes de type tableau de la table dans le nouveau jeu de caractères. Les jeux de caractères utilisent différentes quantités de données par caractère. MySQL convertit le type de certaines colonnes afin de garantir un espace suffisant pour le même nombre de caractères que l'ancien type de colonne.
Je vous recommande de lire le ALTER TABLE Documentation de MySQL avant de modifier des données actives.
Vous pouvez modifier la valeur par défaut avec un alter table set default charset
mais cela ne changera pas le jeu de caractères des colonnes existantes. Pour changer cela, vous devez utiliser un alter table modify column
.
Changer le jeu de caractères d’une colonne signifie seulement qu’elle pourra stocker une plus grande gamme de caractères. Votre application communique avec la base de données à l’aide du client mysql;
Si quelqu'un recherche une solution complète pour modifier le jeu de caractères par défaut pour toutes les tables de la base de données et convertir les données, il peut s'agir de l'une des solutions suivantes:
DELIMITER $$
CREATE PROCEDURE change_character_set(in charset VARCHAR(64), in collation VARCHAR(64))
BEGIN
DECLARE done BOOLEAN DEFAULT false;
DECLARE tab_name VARCHAR(64);
DECLARE charset_cursor CURSOR FOR
SELECT table_name FROM information_schema.tables
WHERE table_schema = DATABASE();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
SET foreign_key_checks = 0;
OPEN charset_cursor;
change_loop: LOOP
FETCH charset_cursor INTO tab_name;
IF done THEN
LEAVE change_loop;
END IF;
SET @alter = concat('ALTER TABLE ', tab_name,
' CONVERT TO CHARACTER SET ', charset,
' COLLATE ', collation , ';');
SELECT @alter;
PREPARE stmt FROM @alter;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP change_loop;
CLOSE charset_cursor;
SET foreign_key_checks = 1;
END$$
DELIMITER ;
Vous pouvez placer ce code dans le fichier, par exemple. chg_char_set.sql
et l'exécuter par exemple en l'appelant depuis le terminal MySQL:
mysql> source ~/path-to-the-file/chg_char_set.sql
Appelez ensuite une procédure définie avec les paramètres d'entrée souhaités, par exemple.
mysql> change_character_set('utf8mb4', 'utf8mb4_general_ci');