• 【MySQL】数据类型之数字相关


    "


    目录

    #. 数值类型

    1. 数值范围验证

    /. 有符号

    /. 无符号

    2. int类型显示长度验证

    #. 浮点型

    1. 验证

    /. 建表

    /. 精度

    #. 日期类型

    1. 验证

    /. year

    /. date、time、datatime

    /. timetamp

    /. datetime 与 timestamp 区别

    /. 注意事项


    详见链接

    MySQL常用数据类型概括:

    1. 数字:
    整型:tinyint int bigint
    小数:

    • float: 在位数比较短的情况下不精确
    • double:在位数比较长的情况下不精确(如:0.000001230123123123 存成:0.000001230000)
    • decimal:精确,内部原理是以字符串形式去存(如果是使用小数,则推荐使用此方法)

    2. 字符串:

    • char(0):简单粗暴,浪费空间,存取速度快(root 存成 root000000)
    • varchar:精确,节省空间,存取速度慢

    sql优化:创建表时,定长的类型往前放(比如性别),变长的往后放(比如地址或描述信息).
    >255个字符,超了就把文件路径放到数据库中,比如图片,视频等找一个文件服务器,数据库中只存放路径或url.

    3. 事件类型:

    • datatime:最常用,获取当前日期事件

    4. 枚举类型与集合类型

    • enum 和 set:前者单选,后者多选

    #. 数值类型

    整数类型: TINYINT SMALLINT MEDIUMINT INT BIGINT
    作用:存储年龄、等级、ID、各种号码等

    ========================================

    tinyint[(m)] [unsigned] [zerofill]

    小整数,数据类型用于保存一些范围的整数数值范围:
    有符号: -128 ~ 127
    无符号: 0 ~ 255

    PS:MySQL中无布尔值,使用tinyint(1)构造.

    ========================================

    int[(m)] [unsigned] [zerofill]

    整数,数据类型用于保存一些范围的整数数值范围:
    有符号: -2147483648 ~ 2147483647
    无符号:0 ~ 4294967295

    ========================================

    bigint[(m)] [unsigned] [zerofill]

    大整数,数据类型用于保存一些范围的整数数值范围:
    有符号:-9223372036854775808 ~ 9223372036854775807
    无符号:0 ~ 18446744073709551615

    1. 数值范围验证

    /. 有符号

    默认是有符号的

    在这里插入图片描述

    /. 无符号

    指定unsigned后,即为无符号

    在这里插入图片描述

    2. int类型显示长度验证

    int类型后面可指定的数字是显示宽度,而不是存储宽度.

    在这里插入图片描述

    注意:为改类型指定宽度时,仅仅只是指定了查询结果的显示宽度,与存储范围无关,存储范围如下表:

    在这里插入图片描述

    完全没有必要为整数类型指定显示宽度,使用默认的就可以了.
    默认的显示宽度,都是在最大值的基础上加1.

    int的存储宽度是4个bytes,即32个bit,即2**32
    无符号的最大值为:4294967296-1
    有符号的最大值为:2147483648-1
    有符号与无符号的最大数字需要的显示宽度均为0,而针对有符号的最小值则需要11为才能显示完全,所以int类型默认的显示宽度为11是非常合理的.


    #. 浮点型

    定点数类型:DEC等同于DECIMAL
    浮点类型:FLOAT DOUBLE

    作用:存储薪资、身高、体重、体质参数等

    —————————————— FLOAT ——————————————

    float[(M, D)] [unsigned] [zerofill]
    # 参数解释:单精度浮点数(非准确小数值),M是全长,D是小数点后个数。M最大值为255,D最大值为30.

    有符号:
    -3.402823466E+38 to -1.175494351E-38
    1.175494351E-38 to 3.402823466E+38
    无符号:
    1.175494351E-38 to 3.402823466E+38

    精确度:随着小数的增多,精度变得不准确

    —————————————— DOUBLE ——————————————

    double[(M, D)] [unsigned] [zerofill]
    # 参数解释:双精度浮点数(非精确小数值),M是全长,D是小数点后个数。M最大值为255,D最大值为30.

    有符号:
    -1.7976931348623157E+308 to -2.2250738585072014E-308
    2.2250738585072014E-308 to 1.7976931348623157E+308
    无符号:
    2.2250738585072014E-308 to 1.7976931348623157E+308

    精确度:随着小数的增多,精度比float要高,但也会变得不准确

    —————————————— DECIMAL ——————————————

    decimal[(M[,D])] [unsigned] [zerofill]
    # 参数解释:准确的小数值,M是整数部分总个数(负号不算),D是小数点个数。M最大值为65,D最大值为30.

    精确度:
    随着小数的增多,精确度始终准确
    对于精确数值计算时需要用此类型
    decaimal能够存储精确值的原因在于其内部按照字符串存储

    1. 验证

    /. 建表

    在这里插入图片描述

    /. 精度

    在这里插入图片描述


    #. 日期类型

    DATE TIME DATETIME TIMESTAMP YEAR
    作用:存储用户注册时间,文章发布时间,员工入职时间,出生日期,过期时间等.

    语法:
            YEAR
                    YYYY (1901/2155)    # 1901/2155是年份限制,18年测试是在这个范围,往后可能会增加

            DATE
                    YYY-MM-DD (1000-01-01/9999-12-31)

            TIME
                    HH:MM:SS ('-838:59:59'/'838:59:59')

            DATETIME
                    YYY-MM-DD HH:MM:SS (1000-01-01 00:00:00/9999-12-31 23:59:59)

            TIMESTAMP
                    YYYYMMDD HHMMSS (1970-01-01 00:00:00/2037 年某时)

    1. 验证

    /. year

    在这里插入图片描述

    /. date、time、datatime

    now():MySQL只带函数,调用时会自动获取当前类型指定的时间.

    接上图:

    在这里插入图片描述

    /. timetamp

    在这里插入图片描述

    可见,插入的记录默认为当前时间,指定为null时依然为当前时间.

    /. datetime 与 timestamp 区别

    在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下会展现出它们各自的优劣.

    下面是这两种日期类型的区别:

    1. 前者的日期范围是1001-9999年;后者的日期范围是1970-2038年.
    2. 前者存储时间与时区无关;后者存储时间与时区有关,显示的值也依赖于时区,在MySQL服务器.
    3. 前者使用8字节的存储空间;后者的存储空间为4字节,因此,后者比前者的空间利用率更高.
    4. 前者的默认值为null;后者的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),即如果不做特殊处理,并且update语句中没有指定改列的更新值,则默认更新为当前时间.

    /. 注意事项

    1. 单独插入时间时,需要以字符串的形式,按照对应的格式插入.
    2. 插入年份时,尽量使用4位值.
    3. 插入两位年份时:0<=value<=69 ,以20开头,比如50,结果2050;100>value>=70,以19开头,比如71,结果1971.

      在这里插入图片描述



    "
  • 相关阅读:
    C#学习
    1.计算机的硬件
    C++ bitset——高端压位卡常题必备STL
    Aragorn's Story
    Sql Server DTS使用
    Django的SQL注意事项(以及时间戳转换日期格式)
    HTML中复选框的使用方法
    Http常见状态码
    scrapy yield 回调函数不执行解决方案
    jsonp跨域请求
  • 原文地址:https://www.cnblogs.com/zyk01/p/11375902.html
Copyright © 2020-2023  润新知