數據庫時間類型


maria和mssql時間類型區別

maria里面的datetime是可以設置長度的,默認是0.這個長度的影響范圍是秒后面的

值,例如1999-01-01 10:10:10,這個時間對應的類型長度是datetime(0),如果設置成datetime(6),那么對應時間就是 1999-01-01 10:10:10.000000 ,秒后面又6個0.

sqlserver數據庫中,datetime時間類型和maria的datetime以及datetime(6)是不能

等同的.sqlserver的datetime默認是帶有3個毫秒值的,例如 1999-01-01 10:10:10.000 ,可以對應於maria的datetime(3).但是,sqlserver還由一個時間類型,datetime2(7),這個是可以設置長度的,比如datetime2(6),等同於maria的datetime(6).

c#的時間類型DateTime,可以對應使用mariadb的datetime(0~6).也可以對應

sqlserver的datetime和datetime2(0-7).可見,sqlserver可以有7位毫秒精度,maria最大是6位.不過,大多數系統是用不到的.

c#和mssql還有一個datetimeoffset(7)類型,對應的c#也有DateTimeOffset,這種是

帶有時區的,1999-01-01 12:26:14.7466667 +08:00,那個(7)是可以設置長度的.

c#時間類型對應數據庫時間類型,在存庫時的測試

C#的DateTime,DateTimeOffset類型,插入到sqlserver的datetime,datetime2(0~7),datetimeoffset(0~7)的情況:

DateTime 是c#的一個時間類型,精確到毫秒7位數

以這個時間例子做插入測試: 1911-01-01 10:10:10.9725850

1. sqlserver的datetime默認保留3位毫秒,例子插入后變成 1911-01-01 10:10:10.973

2. datetime2(0),不要毫秒部分,插入后變成1911-01-01 10:10:11

3. datetime2(2),插入后變成1911-01-01 10:10:10.97

4. datetimeoffset(7),插入后,變成1911-01-01 10:10:10.9725850+00:00,因為C#DateTime類型不帶時區,所以datetimeoffset類型沒能得到時區值,默認設置00:00時區

sqlserver對插入的時間值做了4舍5入.當插入的時間不要毫秒部分時,例如datetime2(0),例子時間的毫秒部分9725850,會向前"5入"一秒,所以時間變成了1911-01-01 10:10:11.當插入時間毫秒部分保留n位(<=7n>=0)時,會將大於n位的部分4舍5入后丟棄.

DateTimeOffset是c#的一個時間類型,精確到毫秒7位數,並且帶有時區

例子: 1911-01-01 10:10:10.0774912 +08:00

插入datetime,和datetime2(0~7)類型時,丟棄時區,4舍5入毫秒

插入datetimeoffset(0~7)類型時,時區保留,4舍5入毫秒

嚴格的說,對於DateTime類型,對應的數據庫類型是datetime或者datetime2,DateTimeOffset則對應datetimeoffset(0~7)

對於存時間數據來說,C#用DateTime,DateTimeOffset,數據庫類型用datetime,datetime2,datetimeoffset都可以容錯

但讀取數據時,如果數據庫類型是datetimeoffset,而C#用了DateTime,那就會轉換失敗.offset有時區部分,而DateTime沒有,

這兩個類型的結構不同,反之數據庫用datetime或者datetime2,C#用DateTimeOffset接收,也會失敗.

所以C#用DateTimeOffset要對應用數據庫的datetimeoffset類型,DateTime對應datetime或者datetime2

C#的DateTime,DateTimeOffset類型,插入到maria的datetime(0~6)的情況:

還是以這個時間例子做插入測試: 1911-01-01 10:10:10.9725850

DateTime

1. datetime(0)插入后值是1911-01-01 10:10:10 ,可見這個與sqlserver不同,沒有4舍5入,而是直接丟棄毫秒部分了

2. datetime(5)插入后值是1911-01-01 10:10:10.97258,毫秒部分保留5位,多出的丟棄,不4舍5入.

DateTimeOffset

例子: 1911-01-01 10:10:10.0774912 +08:00

直接插入失敗,maria的datetime(0~6)不能接受這樣的時間,因為C#的DateTimeOffset與maria的datetime(0~6)格式不同,帶了時區.所以不能支持.那么,對於maria數據庫C#要使用DateTime類型才能匹配.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM