我正在使用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
对此有何想法?
答案 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
对象中的小数秒插入数据库之前,将其截断。