我在 HeidiSQL 中创建了一个表:
CREATE TABLE `publish_dt` (
`ID` BIGINT(20) NOT NULL AUTO_INCREMENT,
`TS` DATETIME NULL DEFAULT NULL,
`Text` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (`ID`) USING BTREE
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2
;
然后我将一些数据插入表中,例如
INSERT INTO publish_dt (`Text`) VALUES ('Hello')
然后我想将TS
列更改为非NULL
,默认值为“1001-01-01 00:00:00”。我尝试在 HeidiSQL 中执行此操作,它产生以下ALTER TABLE
查询:
ALTER TABLE `publish_dt`
CHANGE COLUMN `TS` `TS` DATETIME NOT NULL DEFAULT '1001-01-01 00:00:00' AFTER `ID`;
但是,当我尝试在 HeidiSQL 中保存更改时,我从数据库收到以下错误:
SQL Error (1265): Data truncated for column 'TS' at row 1
请您澄清为什么会发生此错误(我DATETIME
在互联网上找不到相同的情况)以及如何解决?
问的原因:MariaDB 文档说
MariaDB 以支持 1000-01-01 00:00:00.000000 和 9999-12-31 23:59:59.999999 之间的值的格式存储使用 DATETIME 数据类型的值。
更改失败,因为该行的 TS 列值为 null。如果您从您的 alter 语句中删除“NOT NULL”,它将正常工作,尽管您最终仍会得到您第一次插入的行,其 TS 值为 null。
如果您在不尝试设置默认值的情况下进行更改,您将收到相同的错误。您尝试使用的
alter
不会替换空值,因此您会收到错误消息。您可以在更改之前更改行的值,但是正如您所写的那样,更改将不会像您所看到的那样工作。