MySQL日期警告数据被截断。

8
我在使用Mysql的日期格式方面遇到了有趣的问题。 我有这个表:
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| file_path   | varchar(255) | YES  |     | NULL    |                |
| date_export | date         | YES  |     | NULL    |                |

当我使用日期函数NOW()更新行时,日期会以以下格式更新:
'2014-01-23'

但是,当我使用另一种日期格式,比如手写的日期格式时,例如:
update backup_conf_allied set date_export='2014-23-01' where file_path='IDF-952584-SW1' ;

日期导出列转换为:
'0000-00-00'

警告表格告诉我:
| Warning | 1265 | Data truncated for column 'date_export' at row 3628 |

为什么?日期格式与NOW()函数相同。谢谢。
3个回答

14

发布的查询

update backup_conf_allied set `date_export='2014-23-01'` where file_path='IDF-952584-SW1' ;

它应该是什么样子

update backup_conf_allied set `date_export='2014-01-23'` where file_path='IDF-952584-SW1' ;

MySQL支持日期格式为'YYYY-MM-DD',先年份再月份再日期,所以如果您使用错误的值更新日期列,例如"2014-23-01",那么会出现问题。因为一年只有12个月,而23是一个无效的月份,MySQL会将其转换为零日期(0000-00-00)。


1
NOW() 返回当前时间戳,格式为 "2014-01-23 15:48:50"。 - Abdul Manaf

0

我最近遇到了类似的问题,我的问题是我试图将一个datetime对象上传为date对象。虽然这不是Gui O遇到的同样问题,但如果你遇到了这个问题,请确保你实际上正在尝试上传一个date对象。


0
我遇到了同样的问题,但原因不同。我的MySQL列具有datetime类型,但我的datetime值来自Python,它们看起来像这样:`'2021-04-01 03:58:50.088087'。
因此,结果是在句点之前截断:
t = t[0:19]

e.g.:

>>> datetime.datetime.now().isoformat()
'2021-04-03T08:28:41.602373'
>>> datetime.datetime.now().isoformat()[0:19]
'2021-04-03T08:28:44'
>>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接