1、场景

有两个表:t_alphat_beta,它们的表结构相同,如下所示:

  • t_alpha
CREATE TABLE `t_alpha` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `number` varchar(15) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `description` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
  • t_beta
CREATE TABLE `t_beta` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `description` varchar(200) DEFAULT NULL,
  `number` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

t_alpha表数据如下,需要把t_alpha表的数据全部插入到t_beta表,使用INSERT INTO Table1 SELECT * FROM Table2;的方式。

2、问题

insert into t_beta (select * from t_alpha);

在执行SQL时报错:

[SQL] insert into t_beta (select * from t_alpha);
[Err] 1406 - Data too long for column 'number' at row 1

3、解决方式

使用指定列名的方式即可:

insert into t_beta(name, number, description)(select name, number, description from t_alpha);