Mysql ADDTIME函数提供错误截断错误的时间值:“35 00:00:00”

Mysql ADDTIME函数提供错误截断错误的时间值:“35 00:00:00”,mysql,datetime,Mysql,Datetime,试图了解ADDTIME实际上是如何工作的。 样本表: CREATE TABLE table3 ( id INT(11) NOT NULL AUTO_INCREMENT, update_time DATETIME NOT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=latin1; 样本数据: +-----+-----------------------+ | id | update_time

试图了解ADDTIME实际上是如何工作的。 样本表:

CREATE TABLE table3 (
  id INT(11) NOT NULL AUTO_INCREMENT,
  update_time DATETIME NOT NULL,
  PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=latin1;  
样本数据:

+-----+-----------------------+
| id  |      update_time      |
+-----+-----------------------+
| 1   | 2017-09-13 18:55:24   |
| 2   | 2017-08-10 18:53:16   |
+-----+-----------------------+
如果执行以下查询,则会显示错误:

UPDATE table3 SET update_time = ADDTIME(NOW(), '60 00:00:00') WHERE id=1;  

Error Code: 1292  
Truncated incorrect time value: '60 00:00:00'
尽管以下查询工作正常:

UPDATE table3 SET update_time = ADDTIME(NOW(), '5 00:00:00') WHERE id=1;  
试图不断增加日的价值,发现它在日=34之前工作良好,在日>34时休息; 找不到一个明确的答案,为什么它会在一个极限后打破。能解释一下它是如何工作的吗? PS:我知道可以改用DATE\u ADD,我使用的是MySql 5.7.12。

来源:

时间值的范围为“-838:59:59”到“838:59:59”


根据手册:

MySQL以以下格式识别时间值:

作为“D HH:MM:SS”格式的字符串。您还可以使用以下“宽松”语法之一:“HH:MM:SS”、“HH:MM”、“D HH:MM”、“D HH”, 或“SS”。这里D表示天数,其值可以是0到34

作为“HHMMSS”格式的不带分隔符的字符串,前提是该字符串作为时间段有意义。例如,“101112”被理解为 “10:11:12”,但“109712”是非法的,它有一个荒谬的分钟部分 变成“00:00:00”

作为HHMMSS格式的数字,前提是它作为时间有意义。例如,101112被理解为“10:11:12”。以下 也可以理解其他格式:SS、MMSS或HHMMS

该限制与时间类型的范围有关,很可能与中所示的底层存储需求有关

您不能使用DATE_ADD而不是ADDTIME,因为前者会将时间戳/日期时间值转换为日期,并释放时间部分

改用:

838:59:59 = 34 days 22 hours 59 minutes 59 seconds
UPDATE table3 SET update_time = TIMESTAMPADD( DAY, 60, NOW() ) WHERE id = 1;