2014-04-01 83 views
0

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

当我的同事执行相同的操作,他的作品申请和空值设置为0

唯一明显不同的是,他正在运行MySQL服务器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

提供确切的DDL查询和错误信息 – zerkms

+0

您可以发布完整的错误消息,你获得,请与表的创建语句您有问题请改变? – llanato

回答

2

由于插入后bad_columns的值为NULL,所以发生错误。

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

如果你想这样做,那么更新列第一:

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

感谢您花时间回复。我知道如何解决这个问题。我的同事不必执行这个额外的步骤 - 他的MySQL自动完成这一步。我更感兴趣的是为什么我们看到这种奇怪的行为。 – Chris

+0

你可以在SQL Fiddle上测试它(http://www.sqlfiddle.com/#!9)。这个错误似乎因MySQL的版本而异。也许它在早期版本中起作用。 –