2014-04-01 109 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的版本而異。也許它在早期版本中起作用。 –