我使用的是c和mysql。我需要将datetime.maxvalue保存到其中一列。
ado.net代码为datetime.maxvalue提供了以下值
1999年12月31日晚上11:59:59
在mysql中保存时,我看到datetime(3)列的值保存为:
0000-00-00 00:00:00.000
ado.net代码示例
DateTime time = DateTime.MaxValue;
sqlCommand.Parameters.AddWithValue("Expires", time);
sqlCommand.ExecuteNonQuery();
列的数据类型是datetime(3)
我仍然不明白为什么datetime.maxvalue会保存为0000-00-00:00:00.000
有什么想法吗?
2条答案
按热度按时间gxwragnw1#
一
DATETIME
列最多可以存储'9999-12-31 23:59:59'
.DateTime.MaxValue
实际上是9999-12-31 23:59:59.9999999
. 当您尝试插入它时,分数秒溢出了字段的最大大小。正常(in
STRICT
模式),mysql服务器将发出datetime field overflow
错误。但是如果你在运行你的服务器ANSI
模式下,溢出将自动转换为“无效”日期时间值0000-00-00
.解决这个问题的一种方法是使用
STRICT
在你的mysql服务器上。另一种方法是将列类型指定为
DATETIME(6)
,它允许存储分数秒。第三种方法是截断
DateTime
在将对象插入数据库之前。ifmq2ha22#
也许有什么触发因素阻止你把这么高的日期保存到你的专栏里?你试过从sql查询中插入那个日期吗?我在oracledb中做了一些测试,一切都很顺利。在mysql中应该不会有什么不同。。。