Je sais qu'il existe de nombreux paramètres pour une langue pour une table et une base de données.
J'ai déjà créé la base de données. Je crois que quand je l’ai créé, c’était default/LATIN. Je veux tout changer - je veux dire ... la table et la base de données, en UTF-8 .
Comment puis je faire ça? Merci.
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
Regardez Utilisez la commande alter pour changer le jeu de caractères .
Autre lien utile: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html
La forme générale est
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
et pour une colonne spécifique dans une table
ALTER TABLE column COLLATE utf8_general_ci
la réponse de aioobe explique comment modifier le jeu de caractères d'une base de données, d'une table ou d'une colonne. Vous devriez garder à l'esprit que
la définition du jeu de caractères pour une table spécifie simplement le jeu de caractères par défaut pour les nouvelles colonnes de cette table. Cela ne change pas le jeu de caractères pour les colonnes préexistantes; vous devez créer ces colonnes individuellement, OR si vous souhaitez modifier chaque colonne de type chaîne du tableau en utilisant le même jeu de caractères, vous pouvez utiliser une commande à cette fin: "alter table ... convert to jeu de caractères "( http://dev.mysql.com/doc/refman/5.1/en/alter-table.html )
si vous avez déjà des données mal encodées dans une colonne, alors utiliser "alter table ... modify" pour changer de colonne ne résoudra pas tout à fait le problème. Par exemple, si vous stockez des données UTF-8 dans une colonne Latin1 et que vous modifiez directement le jeu de caractères de Latin1 à UTF-8, il sera toujours mal codé par la suite. Ceci peut être contourné en convertissant du latin-1 au UTF-8 via binaire.
1) Jeu de caractères et classement par défaut dans la base de données:
SELECT @@character_set_database, @@collation_database;
Modifié via: ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;
2) Jeu de caractères et classement par défaut de la table:
SELECT T.table_name, CCSA.character_set_name
FROM information_schema.TABLES T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA
WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "YOUR_DB";`
Modifié via: ALTER TABLE [table_name] CHARACTER SET utf8 COLLATE utf8_general_ci
3) Jeu de caractères de colonne et classement:
SELECT c.TABLE_NAME, c.COLUMN_NAME, c.CHARACTER_SET_NAME, c.COLLATION_NAME
FROM information_schema.COLUMNS c
WHERE c.table_schema = "YOUR_DB";`
Modifié via: ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
La troisième exige que vous désactiviez les contrôles de clé étrangère pour la conversion des données. Donc, mettre tout cela ensemble:
DELIMITER //
CREATE PROCEDURE migrate_charset_to_utf8()
BEGIN
DECLARE done TINYINT DEFAULT 0;
DECLARE curr_table VARCHAR(64);
DECLARE table_cursor CURSOR FOR
SELECT T.table_name
FROM information_schema.TABLES T
WHERE T.TABLE_TYPE = 'BASE TABLE' AND
T.TABLE_SCHEMA = 'YOUR_DB';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN table_cursor;
table_loop: LOOP
FETCH table_cursor INTO curr_table;
IF done THEN
LEAVE table_loop;
END IF;
# Convert table data(columns) charset
SET @sql_str1 = CONCAT("ALTER TABLE ", curr_table, " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
PREPARE stmt1 FROM @sql_str1;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
# Set table's default charset e.g for new columns added
SET @sql_str2 = CONCAT("ALTER TABLE ", curr_table, " CHARACTER SET utf8 COLLATE utf8_general_ci");
PREPARE stmt2 FROM @sql_str2;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
END LOOP table_loop;
CLOSE table_cursor;
END//
DELIMITER ;
SET @@FOREIGN_KEY_CHECKS = 0;
CALL migrate_charset_to_utf8();
SET @@FOREIGN_KEY_CHECKS = 1;
ALTER DATABASE CHARACTER SET utf8 COLLATE utf8_general_ci;
EDIT: regardez ici à la place