.NET DateTime.MinValue
是1/1/0001,但是Windows Azure表存儲不接受此值,因爲它具有不同的下限:CloudTableClient.MinSupportedDateTime
。爲什麼Azure表存儲具有與.NET不同的DateTime.MinValue限制
爲什麼有這樣的區別,是什麼讓Azure團隊這樣設計的?這是有問題的,我相信這個選擇背後有技術難題。
.NET DateTime.MinValue
是1/1/0001,但是Windows Azure表存儲不接受此值,因爲它具有不同的下限:CloudTableClient.MinSupportedDateTime
。爲什麼Azure表存儲具有與.NET不同的DateTime.MinValue限制
爲什麼有這樣的區別,是什麼讓Azure團隊這樣設計的?這是有問題的,我相信這個選擇背後有技術難題。
很可能,Azure以與DateTime
所使用格式不同的格式存儲這些值。數據庫引擎的類型系統與任何客戶端編程語言的類型系統都是相同的。工程經常是關於權衡的,數據庫開發人員通常會做出與其他工具開發人員不同的選擇。例如,DateTime
使用兩位來存儲與時區相關的數據,以便在夏時制轉換期間支持UTC和本地時間之間的往返。在執行比較,散列或序列化時,這些額外的兩位被屏蔽掉。我非常懷疑Azure存儲這樣的信息,因爲它不需要它,它只會造成不必要的複雜查詢。
不幸的是我不知道的DateTime
如何存儲在Azure中細節的任何引用,但this MSDN blog提到兩個DateTime
有限的範圍內,以及另一種方式Azure的類型比.NET等效較爲有限 - String
和byte[]
限制爲64KB。
1/1/1601是一個熟悉的日期。這是可以存儲的最小值[在FILETIME](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx)。 – 2013-04-28 02:59:32
@HansPassant如果您添加回答,我會將其標記爲正確答案。 – 2013-04-29 18:39:07
你有一個很好的答案,我的評論只是一個猜測。 – 2013-04-29 20:02:39