• MySQL5.7数据类型之数值型


    数据类型概述

    • MySQL的数据类型分为五大类
      • 数值型
      • 时间型
      • 字符串型
      • 空间型
      • JSON型
    • 本文主要详细描述数值型

    数据类型基本概念

    • M:整数类型,M表示显示的最大宽度。浮点和定点类型,M是存储的总位数(精度)。字符串类型,M是最大长度。M的范围依赖于数据类型。
    • D:D在浮点和定点类型中表示小数位数。最大值为30,不能超过M-2
    • fps:fps用于time,datetime,timestamp类型表示分秒精度,也就是分秒的位数。范围在0-6,默认为6。
    • []:方括号表示类型定义的可选部分

    数值型

    分类

    • 整型
      • TYNYINT
      • SALLINT
      • INTEGER
      • MEDIUMINT
      • BIGINT
    • 定点型
      • DECIMAL
    • 浮点型
      • FLOAT
      • DOUBLE
    • BIT
      • BIT

    数值型基本规则

    • M对于整型表示显示宽度,跟值的范围没有任何关系,最大值为255。例如:INT(5),代表字段显示宽度为5,它能表示的范围还是-2147483648~2147483647
    • M对于浮点型和定点型,表示存储位数
    • 如果列声明了ZEROFILL,那么自动带有UNSIGNED属性
    • 数值类型默认就是SIGNED,所以有没有这个属性没影响

    整型类型声明详解

    • TINYINT[(M)] [UNSIGNED] [ZEROFILL]
      • M表示显示宽度,范围见下表。M会在查询时的元数据返回,是否适应取决于应用。当跟ZEROFILL配合使用时,如果长度小于M的值,会被0填充。比如TYNYINT(5) ZEROFILL,插入99的时候,会显示为00099
    • BOOL,BOOLEAN
      • 等同于TINYINT(1)
      • 数字0被认为时false,其他数字为true
        • SELECT IF(0, 'true', 'false');结果为false
        • SELECT IF(1, 'true', 'false');结果为true
        • SELECT IF(2, 'true', 'false');结果为true
      • 但是,当数字跟bool比较时,只有0被认为时false,1被认为是true,其余的比较都是false
        • SELECT IF(0 = FALSE, 'true', 'false');结果为true
        • SELECT IF(1 = TRUE, 'true', 'false');结果为true
        • SELECT IF(2 = TRUE, 'true', 'false');结果为false
        • SELECT IF(2 = FALSE, 'true', 'false');结果为false
    • SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
      • 解释同TINYINT
    • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
      • 解释同TINYINT
    • INTEGER[(M)] [UNSIGNED] [ZEROFILL]
      • 解释同TINYINT
      • 等同于INT
    • BIGINT[(M)] [UNSIGNED] [ZEROFILL]
      • 解释同TINYINT
      • SERIAL等同于BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
    类型 存储位数 带符号最小值 无符号最小值 带符号最大值 无符号最大值
    TINYINT 1 -128 0 127 255
    SMALLINT 2 -32768 0 32767 65535
    MEDIUMINT 3 -8388608 0 8388607 16777215
    INT 4 -2147483648 0 2147483647 4294967295
    BIGINT 8 -2^63 0 2^63-1 2^64-1

    定点型详解

    • DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
      • 表示一个精确的值,当存储跟钱相关的数据时推荐使用
      • 等同于DEC、NUMERIC、FIXED
      • M最大值为65,默认10;D最大值30,默认0
      • DECIMAL(5,2)表示存储范围为-999.99 to 999.99

    浮点型详解

    • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
      • 单精度浮点数,7位精度
    • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
      • 双精度浮点数,15位精度
      • 等同于DOUBLE PRECISION
    • 存储近似值,如果没有指定M和D,实际存储范围取决于硬件和操作系统
    • M表示总位数,D表示小数位数
    • 使用UNSIGNED不会改变存储的最大值,只是不允许存储负数
    • 如果REAL_AS_FLOAT模式开启,REAL等同于FLOAT,否则等同于DOUBLE。默认未开启
    • FLOAT(p) [UNSIGNED] [ZEROFILL]
      • p代表精度,如果是0~24,数据类型就变成了FLOAR,如果是25~53就变成了DOUBLE;这个语法主要是为了兼容ODBC
    • 所以,注意FLOAT(5,2)和FLOAT(5)有本质的区别

    BIT型详解

    • BIT(M)
      • M表示位数,范围是1~64,默认1。指定值时使用b'111',代表7,如果类型时BIT(6),那么会左填充,等于b'000111'

    注意

    • 整型里面的M是显示宽度,跟范围没关系,只是在获取结果集元数据能拿到这个值,至于用不用,那就是应用的事了。比如int(3),你还是可以存个99999,没有任何影响。M用来配合ZEROFILL的时候,可以用作0填充,如果不到M位的,左边都是用0填充。
    • 整型使用了UNSIGNED属性,只能存储正数,且上限会变大。小数使用UNSIGNED只会不能允许存储负数,上限不变。
    • 整型和浮点型可以有AUTO_INCREMENT,如果这列是not null的,当插入null到这一列,它会自动设置一个字增值。AUTO_INCREMENT从1开始。设置为0根设置为null一样。
    • 数据溢出在严格模式下会报错,在非严格模式下会插入特定值,只是会显示警告,通过show warnings查看

    参考文档

    MySQL官网

  • 相关阅读:
    oo第四次总结
    oo第三次总结
    补给站总结
    OO第四次单元总结
    OO第三次单元总结
    OO第二次单元总结
    OO第一次单元总结
    提问回顾与个人总结
    软件工程结对作业博客
    OO第一次单元总结
  • 原文地址:https://www.cnblogs.com/zby9527/p/14577605.html
Copyright © 2020-2023  润新知