我有一个现有的表,我想只将一个特定列的charset转换为utf-8。
我知道这个命令ALTER TABLE table_name CONVERT TO CHARACTER SET utf8
是为整个表做的,但我正在寻找一个特定于列的命令。
是否有命令?
答案 0 :(得分:63)
试试这个:
ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
答案 1 :(得分:6)
我同意这一点,它总是可以帮助您... 我最近修改了一个数据库;从utf8移到utf8mb4;这是允许我生成变更的脚本...
生成SQL命令以更改表:
SELECT CONCAT("ALTER TABLE `",`TABLE_NAME`,"` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;")
FROM `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA` = 'xxxx';
生成SQL命令以更改每一列:
SELECT CONCAT("ALTER TABLE `",`TABLE_NAME`,"` MODIFY `",`COLUMN_NAME`,"` ",COLUMN_TYPE," CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ",IF(`IS_NULLABLE`='YES', 'NULL', 'NOT NULL')," ",IF(`COLUMN_DEFAULT` IS NOT NULL, CONCAT(" DEFAULT '", `COLUMN_DEFAULT`, "'"), ''),";")
FROM `information_schema`.`COLUMNS`
WHERE `TABLE_SCHEMA` = 'xxx' AND `TABLE_NAME` = 'xxxx' AND (`CHARACTER_SET_NAME` IS NOT NULL OR `COLLATION_NAME` IS NOT NULL);
请注意,对于构成关系的外键和主键,在修改列之前,您需要先禁用Foregin键检查
SET FOREIGN_KEY_CHECKS=0;
然后启用。
SET FOREIGN_KEY_CHECKS=1;
答案 2 :(得分:0)
下面一个为我工作。
ALTER TABLE table_name
MODIFY column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
答案 3 :(得分:0)
这个对我有用。
ALTER TABLE `table_name` CHANGE `column_name` `column_name` TEXT CHARACTER SET utf8 COLLATE utf8mb4_unicode_ci;