我有一个表reports
,其中包含字段report_date
。该字段的类型设置为TIMESTAMP
。
当我尝试运行以下查询时:
insert into reports (report_date) values (1990-03-25 02:16:36)
我收到以下错误:
错误代码:1292。日期时间值不正确:' 1990-03-25 02:16:36'对于 栏' report_date'在第1行0.000秒
但是查询运行正常,值为'1999-03-25 02:16:36'
。
为什么会这样?
修改
以下是INSERT查询的屏幕截图:
正如您所看到的,我引用了值日期,但我仍然收到"1990-03-25 02:16:36"
的错误,但没有收到"1991-03-25 02:16:36"
的错误。
我已经通过这种方式插入了数千条记录。我对这个日期有问题。我也在Fiddle here上尝试过它,但它不起作用,但不在我的机器上。
答案 0 :(得分:1)
Here's MySQL关于datetime
的文档,这就是它所说的:
TIMESTAMP数据类型用于包含date和的值 时间部分。 TIMESTAMP的范围是'1970-01-01 00:00:01'UTC到 '2038-01-19 03:14:07'UTC。
现在,如果您使用不带引号的1990-03-25 02:16:36
之类的值,MySQL会将1990-03-25
解释为表达式并尝试对其进行评估,例如:
SELECT 2016-01-01;
以上内容被视为表达式并产生2014
值(此处为SQL Fiddle)。但是,它会遇到00:00:01
,无法确定要做什么,因此失败了。
如果将值括在引号中,整个string
将被视为单个标记,并被解析为Timestamp
。
希望这有帮助。
答案 1 :(得分:0)
将日期用单引号括起来,如
insert into `reports` (`report_date`) values('1990-03-25 02:16:36')
答案 2 :(得分:0)
我无法找到解释错误的错误,但我通过将数据类型从TIMESTAMP
更改为DATETIME
来避免错误。