欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tidb表结构变更alter限制问题

程序员文章站 2022-07-13 10:03:03
...
root-11.11.136.102:3306:cat_test 15:02:46> show create table t_heartbeats\G
*************************** 1. row ***************************
       Table: t_heartbeats
Create Table: CREATE TABLE `t_heartbeats` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `metric` varchar(128) NOT NULL DEFAULT '' COMMENT '指标名',
  `domain` varchar(64) NOT NULL DEFAULT '' COMMENT '服务名',
  `ip` varchar(24) NOT NULL DEFAULT '' COMMENT '实例ip',
  `value` double NOT NULL DEFAULT '0.0' COMMENT '心跳值',
  `metric_time` timestamp NOT NULL COMMENT '指标采集的时间戳',
  `creation_time` timestamp NOT NULL COMMENT '记录创建时间',
  PRIMARY KEY (`id`),
  KEY `IDX_domain_ip_metric_time_metric_key` (`domain`,`ip`,`metric`,`metric_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=29990534731 COMMENT='心跳数据'
1 row in set (0.00 sec)

root-11.11.136.102:3306:cat_test 15:02:55> 
root-11.11.136.102:3306:cat_test 14:59:46> alter table h_ct modify `id` varchar(64)  NOT NULL  COMMENT 'ID';
ERROR 1105 (HY000): unsupported modify column charset utf8 not match origin binary
root-11.11.136.102:3306:cat_test 14:59:49> 

查看了下官方文档:https://github.com/pingcap/docs-cn/blob/b185ab362e08455bfb9613162df31d4f3c3d903f/sql/ddl.md#alter-table-%E8%AF%AD%E6%B3%95

里面有介绍:在修改类型方面,只支持整数类型之间修改,字符串类型之间修改和 Blob 类型之间的修改,且只能使原类型长度变长。此外,不能改变列的 unsigned/charset/collate 属性

 

所以只有重建表,rename to,然后 create 。

root-11.11.136.102:3306:cat_test 15:03:53> alter table h_ct rename to t_c_bak;
Query OK, 0 rows affected (1.02 sec)

root-11.11.136.102:3306:cat_test 15:10:06> CREATE TABLE `t_heartbeats` (
    ->   `id` VARCHAR(64) NOT NULL  COMMENT 'ID',
    ->   `metric` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '指标名',
    ->   `domain` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '服务名',
    ->   `ip` VARCHAR(24) NOT NULL DEFAULT '' COMMENT '实例ip',
    ->   `value` DOUBLE NOT NULL DEFAULT '0.0' COMMENT '心跳值',
    ->   `metric_time` TIMESTAMP NOT NULL COMMENT '指标采集的时间戳',
    ->   `creation_time` TIMESTAMP NOT NULL COMMENT '记录创建时间',
    ->   PRIMARY KEY (`id`),
    ->   KEY `IDX_domain_ip_metric_time_metric_key` (`domain`,`ip`,`metric`,`metric_time`)
    -> ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=29990534731 COMMENT='心跳数据';
Query OK, 0 rows affected (1.02 sec)

root-11.11.136.102:3306:cat_test 15:10:39>