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

  • 相关阅读:
    实验axios用户登录及token验证
    vue的路由跳转了,可是页面没有变化
    搞清楚cookie,session,token,JWT
    APP应用测试流程
    Scrum敏捷开发
    APP项目环境及发布平台
    ssh -T git@github.com ssh: connect to host github.com port 22: Connection timed out
    pytest与unitest区别
    数据库三大范式--大白话
    docker 安装mysql挂载/var/lib/mysql目录时启动就退出
  • 原文地址:https://www.cnblogs.com/mirrortom/p/15254035.html
Copyright © 2011-2022 走看看