zoukankan      html  css  js  c++  java
  • 数据库时间类型

    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类型才能匹配.

  • 相关阅读:
    Linux常用命令-centos
    USACO 2006 Open, Problem. The Country Fair 动态规划
    USACO 2007 March Contest, Silver Problem 1. Cow Traffic
    USACO 2007 December Contest, Silver Problem 2. Building Roads Kruskal最小生成树算法
    USACO 2015 February Contest, Silver Problem 3. Superbull Prim最小生成树算法
    LG-P2804 神秘数字/LG-P1196 火柴排队 归并排序, 逆序对
    数据结构 并查集
    浴谷国庆集训 对拍
    1999 NOIP 回文数
    2010 NOIP 普及组 第3题 导弹拦截
  • 原文地址:https://www.cnblogs.com/mirrortom/p/15254035.html
Copyright © 2011-2022 走看看