54

我有一个现有的表,我只想将一个特定列的字符集转换为 utf-8。

我知道该命令ALTER TABLE table_name CONVERT TO CHARACTER SET utf8对整个表执行此操作,但我正在寻找特定于列的命令。

有这个命令吗?

4

4 回答 4

89

试试这个:

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8mb4;
于 2013-04-03T08:02:37.890 回答
21

我分享一下,它总能帮上忙……我最近修改了一个数据库;从 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);

请注意,对于建立关系的外键和主键,您需要在修改列之前禁用外键检查

SET FOREIGN_KEY_CHECKS=0;

并在之后启用。

SET FOREIGN_KEY_CHECKS=1;
于 2018-09-12T20:08:04.737 回答
2

下面一个对我有用。

ALTER TABLE table_name   
MODIFY column_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;
于 2018-12-28T05:11:27.823 回答
2

这个对我有用。

ALTER TABLE `table_name` CHANGE `column_name` `column_name` TEXT CHARACTER SET utf8 COLLATE utf8mb4_unicode_ci; 
于 2019-08-08T05:33:26.303 回答