2017-08-10 7 views
0

ADDTIME()の実際の動作を理解しようとしています。
サンプル表:エラーを返すMysqlのADDTIME関数が間違った時間値を切り捨てました:'35 00:00:00 '

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; 

DAYの値を引き続き増加させようとしたところ、DAY=34までは正常に動作し、DAY > 34の場合は破損していました。
制限を超えて壊れた理由を明確に解明できませんでした。それがどう働いているのかご説明ください。
PS:代わりにDATE_ADD()を使用できることを知っています。私はMySql 5.7.12を使用しています。 https://dev.mysql.com/doc/refman/5.7/en/time.htmlから

答えて

1

マニュアルに従って:

MySQL recognizes TIME values in these formats:

  • As a string in 'D HH:MM:SS' format. You can also use one of the following “relaxed” syntaxes: 'HH:MM:SS', 'HH:MM', 'D HH:MM', 'D HH', or 'SS'. Here D represents days and can have a value from 0 to 34.

  • As a string with no delimiters in 'HHMMSS' format, provided that it makes sense as a time. For example, '101112' is understood as '10:11:12', but '109712' is illegal (it has a nonsensical minute part) and becomes '00:00:00'.

  • As a number in HHMMSS format, provided that it makes sense as a time. For example, 101112 is understood as '10:11:12'. The following alternative formats are also understood: SS, MMSS, or HHMMSS.

制限時間型(最もありそうな基礎となるストレージ要件)の範囲に関連しているとしてthe answer by @ReneS

前者はDATEにごTIMESTAMP/DATETIME値を変換し、時間の部分を失うだろうと

2

TIME values may range from '-838:59:59' to '838:59:59'

838:59:59 = 34 days 22 hours 59 minutes 59 seconds 
-2

あなたは

使用TIMESTAMPADD()代わりに...、ADDTIME()の代わりにDATE_ADD()を使用することはできません。

UPDATE table3 SET update_time = TIMESTAMPADD(DAY, 60, NOW()) WHERE id = 1; 
関連する問題