DateTime.MaxValue在mysql中另存为零

时间:2018-10-18 09:39:13

标签: c# mysql datetime

我正在使用C#和MySql。我有一个需要将DateTime.MaxValue保存到该列之一的要求。

ADO.NET代码为我提供了低于DateTime.MaxValue的值

  

12/31/9999 11:59:59 PM

将其保存在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:00.000

对此有何想法?

2 个答案:

答案 0 :(得分:0)

也许某些触发器阻止将如此高的日期保存到您的列中? 您是否尝试过通过SQL查询插入该日期? 我在Oracle DB中进行了一些测试,所有测试都进行得很顺利。 在mysql中不应该不同...

答案 1 :(得分:0)

一个DATETIME列可以存储值up to '9999-12-31 23:59:59'DateTime.MaxValue实际上是9999-12-31 23:59:59.9999999。尝试插入时,小数秒都会溢出该字段的最大大小。

通常(在STRICT模式下),MySQL Server会发出datetime field overflow错误。但是,如果您以ANSI模式运行服务器,则溢出将以静默方式转换为“无效”日期时间值0000-00-00

解决此问题的一种方法是在MySQL服务器中使用STRICT模式。

另一种方法是将列类型指定为DATETIME(6),这样可以存储小数秒。

第三种方法是在将C DateTime对象中的小数秒插入数据库之前,将其截断。