tidb尚未支持“有损更改”,实验一些,总结一下常用的,同一类型小转大可以,大转小不行,例如:int(2)转int(4)。不同类型不能转换,也有例外int(2)转bigint(2)。
mysql> CREATE TABLE `tank` ( -> `id` int(4) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', -> `ids` varchar(10) NOT NULL DEFAULT 0 COMMENT 'test', -> PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 COMMENT='test'; Query OK, 0 rows affected (0.75 sec) mysql> desc tank;//ids是varchar(10) +---------+-----------------+------+------+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-----------------+------+------+---------+----------------+ | id | int(4) unsigned | NO | PRI | NULL | auto_increment | | ids | varchar(10) | NO | | 0 | | +---------+-----------------+------+------+---------+----------------+ 2 rows in set (0.00 sec) //改表字段报错 mysql> ALTER TABLE `tank` CHANGE `ids` `ids` int(6) NOT NULL DEFAULT '0' COMMENT 'test'; ERROR 8200 (HY000): Unsupported modify column: type int(6) not match origin varchar(10) mysql> insert into tank(ids)value(1); Query OK, 1 row affected (0.05 sec) mysql> select * from tank; +----+-----+ | id | ids | +----+-----+ | 1 | 1 | +----+-----+ 1 row in set (0.01 sec) //新增一个字段 mysql> ALTER TABLE `tank` ADD `ids_bak` INT(6) NOT NULL DEFAULT '0' AFTER `ids`; Query OK, 0 rows affected (0.44 sec) mysql> desc tank; +---------+-----------------+------+------+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-----------------+------+------+---------+----------------+ | id | int(4) unsigned | NO | PRI | NULL | auto_increment | | ids | varchar(10) | NO | | 0 | | | ids_bak | int(6) | NO | | 0 | | +---------+-----------------+------+------+---------+----------------+ 3 rows in set (0.00 sec) mysql> update tank set ids_bak=ids; //将ids的数据更新到ids_bak Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from tank; +----+-----+---------+ | id | ids | ids_bak | +----+-----+---------+ | 1 | 1 | 1 | +----+-----+---------+ 1 row in set (0.00 sec) mysql> ALTER TABLE `tank` drop ids; //删除ids Query OK, 0 rows affected (0.34 sec) mysql> select * from tank; +----+---------+ | id | ids_bak | +----+---------+ | 1 | 1 | +----+---------+ 1 row in set (0.00 sec) mysql> ALTER TABLE `tank` change ids_bak ids INT(6); //将ids_bak改名字为ids Query OK, 0 rows affected (0.11 sec) mysql> desc tank;//字段类型已修改 +-------+-----------------+------+------+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----------------+------+------+---------+----------------+ | id | int(4) unsigned | NO | PRI | NULL | auto_increment | | ids | int(6) | YES | | NULL | | +-------+-----------------+------+------+---------+----------------+ 2 rows in set (0.00 sec) mysql> select * from tank; +----+------+ | id | ids | +----+------+ | 1 | 1 | +----+------+ 1 row in set (0.00 sec) mysql> exit
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/tidb/2496.html