在我的一个表中,我有一个包含一些空值和一些整数值的列。当我使用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配置中是否有允许此设置的设置?是版本吗?
答案 0 :(得分:2)
发生错误是因为bad_columns
在插入后的值为NULL
。
您正在将列类型更改为“not NULL”,那么数据库可以做什么?它可以生成错误。 default
值不适用于现有行。
如果要执行此操作,请先更新列:
update resource.test_table
set bad_column = 0
where bad_column is null;