zoukankan      html  css  js  c++  java
  • 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--二进制类型

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

    关注微信公众号

  • 相关阅读:
    CodeForces 734F Anton and School
    CodeForces 733F Drivers Dissatisfaction
    CodeForces 733C Epidemic in Monstropolis
    ZOJ 3498 Javabeans
    ZOJ 3497 Mistwald
    ZOJ 3495 Lego Bricks
    CodeForces 732F Tourist Reform
    CodeForces 732E Sockets
    CodeForces 731E Funny Game
    CodeForces 731D 80-th Level Archeology
  • 原文地址:https://www.cnblogs.com/pengpengdeyuan/p/15015173.html
Copyright © 2011-2022 走看看