转换零日期时间与允许零日期时间
Posted
技术标签:
【中文标题】转换零日期时间与允许零日期时间【英文标题】:Convert Zero Datetime vs Allow Zero Datetime 【发布时间】:2017-11-29 00:03:06 【问题描述】:Convert Zero Datetime=true
返回 DateTime.MinValue 而Allow Zero Datetime
返回 MySqlDateTime。
这两种设置还有什么区别? 什么时候用哪一个? 它们可以互换使用吗? 它们的优缺点是什么?
【问题讨论】:
您如何尽一切可能避免零日期?零日期不是 NULL,它是无效值。这意味着原始数据丢失了。另一方面,DateTime.MinValue 是完全有效的。插入无效日期应该失败,而不是返回幻数。您可能应该在查询本身中处理这个错误值,在那里您知道是什么产生了它。我希望将这 both 都设置为 false,因此如果查询曾经返回错误日期,我会收到错误消息。 【参考方案1】:您可以参考这一点进行一点澄清:http://forums.devart.com/viewtopic.php?t=21367
但这一切都归结为您希望如何处理 DateTime 上的零值,当您使用 Allow Zero DateTime 时,它无法转换为 DateTime,因为它不支持零值。如果您使用 Convert Zero DateTime 它将使用 DateTime 但它会返回日期可能的较低值,即 DateTime.MinValue。
【讨论】:
这不是一个 NULL 值,它是一个错误值。来自文档,Invalid DATE, DATETIME, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00' or '0000-00-00 00:00:00').
。 NULL 是完全有效的,DateTime.MinValue 也是如此。零日期时间的存在是有问题的,应该避免,例如在查询时输入验证或过滤掉无效值。如果必须返回*,则不应将其转换为有效值
是的,我不小心写了null,我把它删掉了。无论如何,null 对于 c# 上的 DateTime 无效,因为它是一个结构。
明智的选择是将两个选项都设置为 FALSE 并在错误出现时清除它们。不允许错误值传播。如果错误是由错误的输入数据引起的,不要存储它们。如果它是由错误的公式产生的,不要只是掩盖它。
这与 C# 无关。没有零日期。绝对不在 DateTime 使用的公历上。我不确定 any 日历是否有零日期。 mysql 的零日期是一个错误值,甚至不应该出现在数据查询结果中。以上是关于转换零日期时间与允许零日期时间的主要内容,如果未能解决你的问题,请参考以下文章