You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL修改列字符集:如何保留原有属性不丢失?

将MySQL字符集从utf8mb3转为utf8mb4的相关问题

背景

已知在MySQL中,若表结构如下:

CREATE TABLE foo (
  name VARCHAR(100) DEFAULT 'Test' NOT NULL COMMENT 'Default name is Test'
);

执行仅指定字符集的修改语句:

ALTER TABLE `company_db`.`foo` MODIFY COLUMN `name` VARCHAR(100) CHARACTER SET utf8mb4;

会丢失NOT NULL、COMMENT、DEFAULT值等原有属性,因为命令中未明确指定这些属性。

自定义脚本的有效性与属性遗漏检查

我编写了以下脚本,用于批量将所有utf8mb3的字符型列转为utf8mb4,测试过可用,但担心遗漏未知属性,请问该脚本能否确保不丢失任何属性?是否还有遗漏的属性?

SELECT 
  CONCAT(
    'ALTER TABLE `', C.TABLE_SCHEMA, '`.`', C.TABLE_NAME, '` ',
    'MODIFY COLUMN `', C.COLUMN_NAME, '` ',
    C.COLUMN_TYPE,
    ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci',
    
    -- Nullability
    IF(C.IS_NULLABLE = 'NO', ' NOT NULL', ' NULL'),

    -- Default Value
    IF(
      C.COLUMN_DEFAULT IS NOT NULL,
      CONCAT(' DEFAULT ', QUOTE(C.COLUMN_DEFAULT)),
      IF(C.IS_NULLABLE = 'YES', ' DEFAULT NULL', '')
    ),

    -- Extra attributes
    IF(LOCATE('auto_increment', C.EXTRA) > 0, ' AUTO_INCREMENT', ''),
    IF(LOCATE('on update', C.EXTRA) > 0, CONCAT(' ', C.EXTRA), ''),

    -- Column comment
    IF(C.COLUMN_COMMENT != '', CONCAT(' COMMENT ', QUOTE(C.COLUMN_COMMENT)), ''),

    ';'
  ) AS alter_statement
FROM information_schema.COLUMNS C
JOIN information_schema.TABLES T 
  ON C.TABLE_SCHEMA = T.TABLE_SCHEMA 
  AND C.TABLE_NAME = T.TABLE_NAME
WHERE C.CHARACTER_SET_NAME = 'utf8'
  AND T.TABLE_TYPE = 'BASE TABLE'
  AND C.TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
  AND C.DATA_TYPE IN ('char', 'varchar', 'text', 'tinytext', 'mediumtext', 'longtext')
ORDER BY C.TABLE_SCHEMA, C.TABLE_NAME, C.ORDINAL_POSITION;

直接修改数据库/表字符集的可行性

另外,仅执行以下语句修改数据库或表是否可行?是否也会丢失原有属性?
修改数据库字符集:

ALTER DATABASE xxx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

修改表字符集:

ALTER TABLE xxxx  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

内容的提问来源于stack exchange,提问作者Astora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:37:17