• MySQL--数据类型


    数据类型(data_type)是指系统中所允许的数据的类型。MySQL的数据类型通常是针对每个字段所能存储的数据的数据类型,即这一列存储的数据的数据格式,应该符合该列对应字段的数据类型的规则。

    数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。

    我们在创建数据表时,就需要为每个字段设定数据类型,每个字段的数据类型应该是根据系统的具体使用场景来进行确定的,某个字段的数据类型不符合系统的要求可能会导致系统崩溃。数据类型的使用,在一定程度上能够影响程序的功能和性能,所以在设计表时,数据类型的选定也是一个重要的环节。

    一、MySQL的数据类型

    MySQL的数据类型可以大概的分为四大类:数值类型、字符串类型、时间日期类型、二进制类型等。

    1、数值类型

    数值类型又可以分为三个小类:整型、浮点型、定点数。

    (1)整型:TINYINTSMALLINTMEDIUMINTINTBIGINT

    数据类型名称 长度 含义
    TINYINT 1个字节  范围:有符号(-128~127),无符号(0~255) 很小的整数
    SMALLINT 2个字节  范围:有符号(-32768~32767),无符号(0~65535) 小的整数
    MEDIUMINT 3个字节  范围:有符号(-8388608~8388607),无符号(0~16777215) 中等大小的整数
    INT 4个字节  范围:有符号(-2147483648~2147483647),无符号(0~4294967295) 普通大小的整数
    BIGINT 8个字节  范围:有符号(-9223372036854775808〜9223372036854775807),无符号(0~18446744073709551615) 大整数

    (2)浮点型:FLOATDOUBLE、REAL

    数据类型名称 长度  含义
    FLOAT(M,D) 4个字节  范围:-3.4E38~3.4E38(7个有效位) 单精度实型
    DOUBLE(M,D) 8个字节  范围:-1.7E308~1.7E308(15个有效位) 双精度实型
    REAL(M,D) 8个字节  范围:-1.7E308~1.7E308(15个有效位) 不精确的双精度浮点型,在创建表时,默认转换成double类型

    (有效位=整数部分位数+小数部分位数)

    float、double、real字段存储位数示例:

    注意:real字段设定时是real类型,但是真正保存后MySQL自动转换成double类型了!!

     由上图可以发现,float类型存储的数据是原数据的近视值,不能准确的存储原数据,尽管上图中的double类型在有效位范围内存储的数据看似准确,但其实在末尾的小数中存储的也是近视值,在某些对小数要求严格的项目中,通常使用定点数来作为小数的数据格式。

    (3)定点数:DECIMAL、NUMERIC

    在数据库中存放的是精确值

    数据类型名称  长度   含义
     DECIMAL(M,D)  共有65个有效位,小数部分最多30个有效位,0<=D<=30,D<=M<=65-D  定点数
     NUMERIC(M,D)  同上  同上

    设定numeric数据类型时,MySQL默认转换成decimal类型。

    2、字符串类型

     CHARVARCHARTINYTEXTTEXTMEDIUMTEXTLONGTEXTENUMSET 

    数据类型名称 长度 含义
    CHAR(M) M 字节,0<=M<=255,范围:0-255字符 固定长度非二进制字符串
    VARCHAR(M) L+1字节,L<= M,0<=M<=2^16,范围:64k 变长非二进制字符串
    TINYTEXT L+1字节,L<2^8,范围:0-255字节 非常小的非二进制字符串
    TEXT L+2字节,L<2^16,范围:64k 小的非二进制字符串
    MEDIUMTEXT L+3字节,L<2^24,范围:16M 中等大小的非二进制字符串
    LONGTEXT L+4字节,L<2^32,范围:4G 大的非二进制字符串
    ENUM 1或2个字节,取决于枚举值的数目 (最大值为65535) 枚举类型,只能有一个枚举字符串值
    SET 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) 一个字符串对象,可以有零个或多个SET成员

    字符类型解析:MySQL--char,varchar,text类型

    ENUM类型

    枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1-255个成员的枚举需要1个字节存储,对于255-65535个成员,需要2个字节来存储。最多允许有65535个成员。ENUM类型忽略大小写,当插入值不在枚举的范围内时,不会报错,会将第一个值插入。

    SET类型

    也是一个字符串对象,里面可以包好64个成员,根据成员的不同,存储也不同

    1-8个成员,占1个字节,9-16个个成员的集合,占2个字节,17-24成员的集合,占3个字节,25-32成员的集合,占4个字节,33-64成员的集合,占8个字节

    SET类型可以一个插入多个成员,ENUM类型一次只能插入一个成员。

    SET类型可以从允许集合中选择1-多个元素进行组合。所以对于输入的值只要是允许范围内的,都可以正确注入到SET类型中,对于重复的成员,则只取一次。

     3、时间日期类型

    YEARTIMEDATEDTAETIMETIMESTAMP

    数据类型名称 长度 含义
    YEAR 1 个字节,范围:1901 ~ 2155 yyyy
    TIME 3个字节,范围:-838:59:59 ~ 838:59:59 HH:mm:ss
    DATE 3个字节,范围:1000-01-01 ~ 9999-12-3 yyyy-MM-dd
    DATETIME 8个字节,范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 yyyy-MM-dd HH:mm:ss
    TIMESTAMP 4个字节,范围:1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC yyyy-MM-dd HH:mm:ss

      time、date、datatime、timestamp类型解析:MySQL--时间类型

     4、二进制类型

     BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOB 、 LONGBLOB

    数据类型名称 长度 含义
    BIT(M) 位字段类型 大约 (M+7)/8 字节
    BINARY(M) 固定长度二进制字符串 M 字节
    VARBINARY (M) 可变长度二进制字符串 M+1 字节
    TINYBLOB (M) 非常小的BLOB L+1 字节,在此,L<2^8
    BLOB (M) 小 BLOB L+2 字节,在此,L<2^16
    MEDIUMBLOB (M) 中等大小的BLOB L+3 字节,在此,L<2^24
    LONGBLOB (M) 非常大的BLOB L+4 字节,在此,L<2^32

    二进制类型解析:MySQL--二进制类型

    分享所感,如有侵权,请联系删除,可扫码关注微信公众号获取更多福利噢。
    (您的“打赏”将是我最大的写作动力!转载请注明出处.)

    关注微信公众号

  • 相关阅读:
    「SAP技术」SAP MM MB5M报表不显示特殊库存数据
    python-day3-条件判断与循环
    python-day2-运算符
    Mysql数据库意外崩溃导致表数据文件损坏无法启动的问题解决
    图书管理系统(Servlet+Jsp+Java+Mysql,附下载演示地址)
    求解最长递增子序列(LIS) | 动态规划(DP)+ 二分法
    HTML+CSS+JavaScript实现植物大战僵尸(附演示地址)
    面试官:如何在Integer类型的ArrayList中同时添加String、Character、Boolean等类型的数据? | Java反射高级应用
    面试官:手撕十大排序算法,你会几种?
    用x种方式求第n项斐波那契数,99%的人只会第一种
  • 原文地址:https://www.cnblogs.com/pengpengdeyuan/p/15015173.html
Copyright © 2020-2023  润新知