datetime.maxvalue在mysql中保存为零

6tqwzwtp  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(359)

我使用的是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
有什么想法吗?

agyaoht7

agyaoht71#

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 在将对象插入数据库之前。

ffdz8vbo

ffdz8vbo2#

也许有什么触发因素阻止你把这么高的日期保存到你的专栏里?你试过从sql查询中插入那个日期吗?我在oracledb中做了一些测试,一切都很顺利。在mysql中应该不会有什么不同。。。

相关问题