MySQL截断错误

时间:2014-04-01 00:21:27

标签: mysql mysql-workbench

在我的一个表中,我有一个包含一些空值和一些整数值的列。当我使用MySQL Workbench为该列设置默认值和非null时,我收到截断错误。

当我的同事执行相同的操作时,他的应用程序工作,空值设置为0.

唯一明显的区别是他正在运行MySQL Server 5.6并且我正在运行5.5。

可以使用以下CREATE创建示例表:

CREATE  TABLE 'resource`.`test_table` (
`idtest_table` INT NOT NULL ,
`bad_column` BIGINT(20) NULL ,
PRIMARY KEY (`idtest_table`) );

按如下方式插入一些值:

INSERT INTO `resource`.`test_table` (`idtest_table`) VALUES (1);
INSERT INTO `resource`.`test_table` (`idtest_table`) VALUES (2);
INSERT INTO `resource`.`test_table` (`idtest_table`) VALUES (3);

失败的命令是:

ALTER TABLE `resource`.`test_table` CHANGE COLUMN `bad_column` `bad_column` BIGINT(20) NOT NULL DEFAULT 0  ;

出现以下错误:

ERROR 1265: Data truncated for column 'bad_column' at row 1
SQL Statement:
ALTER TABLE `resource`.`test_table` CHANGE COLUMN `bad_column` `bad_column` BIGINT(20) NOT NULL DEFAULT 0

ERROR: Error when running failback script. Details follow.

ERROR 1050: Table 'test_table' already exists
SQL Statement:
CREATE TABLE `test_table` (
  `idtest_table` int(11) NOT NULL,
  `bad_column` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`idtest_table`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

MySQL配置中是否有允许此设置的设置?是版本吗?

1 个答案:

答案 0 :(得分:2)

发生错误是因为bad_columns在插入后的值为NULL

您正在将列类型更改为“not NULL”,那么数据库可以做什么?它可以生成错误。 default值不适用于现有行。

如果要执行此操作,请先更新列:

update resource.test_table
    set bad_column = 0
    where bad_column is null;