zoukankan      html  css  js  c++  java
  • mysql中数据类型汇总

    整型数据

    image-20201112204331709

    image-20201112203348336

    以TINYINT为例(其他整型数据类似):

    创建字段类型为TINYINT(1),则该字段可以取到的有符号整型最小值:-128最大值:127。-129和128都是越界值,插入时会报错。

    创建TINYINT(2)的字段,进行测试同样取最小值:-128,最大值:127。由于TINYINT默认只占用1个字节,所以即使声明为2个字节大小,也只能存储一个字节的值。

    PS:一个字节(bytes) = 八位(bits)。八位可以表示无符号整数:2^8 - 1 = 256 - 1 = 255,即表示 0-255 范围的数字大小。

    浮点和定点数据类型

    浮点数分为两种:单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE)。

    定点数类型为:DECIMAL

    浮点数类型和定点数类型都可以用(M,N)来表示。其中,M称为精度,表示总共的位数;N称为标度,表示小数的位数。

    image-20201112205427909

    image-20201113111706088

    FLOAT(5,3)为例:其值在数据库中为55.0001,则在查询时因为M精度的设置,只能显示5位数字,因此该值会被四舍五入为:55.000,同理若为55.0006,则会四舍五入为55.001。

    此外:FLOAT和DOUBLE存储的是近似值,而DECIMAL存储的是字符串,所以会不对数值进行四舍五入,因此精确度更高(例如:DECIMAL(5,3),其值设置为55.0001和55.0009都会显示55.000)。

    在定义商品价格之类的类型时,使用FLOAT足以。

    日期与时间类型

    image-20201113114313550

    ……

    字符串类型

    CHAR(M)VARCHAR(M)表示在创建表时指定的存储字符串的最大长度为M。

    CHAR类型是固定长度的。取值范围为:0-255之间的任意值,设置成功后长度不变(即占用存储空间大小被固定)

    VARCHAR类型是变长的。取值范围为:0-65535之间的任意值,设置最大值之后,其存储空间根据字符串长度进行变化。例如:VARCHAR(10),但是只占用了5个字节的大小,因此该字段的空间只占用5+1个字节,最后一个字节位结束标识符。

    对CHAR和VARCHAR的取值范围进行测试,定义CHAR(5)和 VARCHAR(5)只能存储一个字节大小的数据。

    CHAR(5) 占用字节 VARCHAR(5) 占用字节
    ""(空字符串) 5 ""(空字符串) 1
    "ab1" 5 "数字1" 4
    "12345" 5 "12345" 6
    "插入六个汉字" 越界禁止插入 "插入1234" 越界禁止插入

    TEXT类型

    TEXT类型是一种特殊的字符串类型,其中汉字占用3字节,数字字母占用1字节。包括:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT

    类型 允许的长度 存储空间
    TINYTEXT 0-255字节 值的长度+2个字节
    TEXT 0-65535字节 值的长度+2个字节
    MEDIUMTEXT 0-16772150字节 值的长度+3个字节
    LONGTEXT 0-4294967295字节(2^32-1 = 4G) 值的长度+4个字节

    PS:UTF-8对字符串编码,一个汉字占用3个字节,一个字母和数字占用1个字节(mysql配置启用UTF-8编码)

    TINYTEXT默认取值255不可更改大小,因此TINTEXT可以存储255个英文字母,85个汉字。

    其余类型可以取固定存储长度。

    ENUM类型

    ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。语法格式如下:

    字段名 ENUM ('值1’,'值2',…… '值n')
    

    其中,“字段名”指将要定义的字段,“值n”指枚举列表中的第n个值。ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。创建的成员中有空格时,其尾部的空格将自动被删除。ENUM值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从1开始编号,MySQL存储的就是这个索引编号。枚举最多可以有65535个元素。
    例如,定义ENUM类型的列(' first','second','third')该列可以取的值和每个值的索引如表5.7所示。

    image-20201113142900598

    SET类型

    SET是一个字符串对象,可以有零或多个值。SET列最多可以有64个成员,其值为表创建时规定的一列值。指定包括多个SET成员的SET列值时,各成员之间用逗号()间隔开。语法格式如

    SET ('值1','值2',……,'值n')
    

    与ENUM类型相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,SET成员值的尾部空格将自动被删除。

    二进制数据类型

    image-20201113143620877

    BIT类型

    BIT类型是位字段类型。M表示每个值的位数,范围为1~64。如果M被省略,默认为1。如果为BIT(M)列分配的值的长度小于M位,就在值的左边用0填充。例如,为BIT(6列分配一个值b'l01’,其效果与分配b'000101相同。BIT数据类型用来保存位字段值。例如,以二进制的形式保存数据13(13的二进制形式为1101),在这里需要位数至少为4位的BIT类型,即可以定义列类型为BIT(4),大于二进制1111的数据是不能插入BIT(4)类型的字段中的。

    BINARY和 VARBINARY类型类

    BINARY和 VARBINARY类型类似于CHAR和 VARCHAR,不同的是它们包含二进制字节字符串。其使用的语法格式如下:列名称 BINARY(M)或者 VARBINARY(M)
    BINARY类型的长度是固定的,指定长度之后,不足最大长度的,将在它们右边填充“0’补齐以达到指定长度。例如:指定列数据类型为 BINARY(3),当插入a’时,存储的内容实际为“a00”,当插入“ab”时,实际存储的内容为“ab0”,不管存储的内容是否达到指定的长度,其存储空间均为指定的值M VARBINARY类型的长度是可变的,指定好长度之后,其长度可以在0到最大值之间。例如:指定列数据类型为 VARBINARY(20),如果插入的值的长度只有10,则实际存储空间为10加1,即实际占用的空间为字符串的实际长度加1。

    BLOB类型

    BLOB列存储的是二进制字符串(字节字符串),TEXT列存储的是非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值;TEXT列有一个字符集,并且根据字符集对值进行排序和比较。

    image-20201113143705426

    BLOB列存储的是二进制字符串(字节字符串),TEXT列存储的是非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值;TEXT列有一个字符集,并且根据字符集对值进行排序和比较。

    与ENUM类型不同的是,ENUM类型的字段只能从定义的列值中选择一个值插入,而SET类型的列可从定义的列值中选择多个字符的联合。
    如果插入SET字段中列值有重复,则 MySQL自动删除重复的值;插入SET字段的值的顺序并不重要,MySQL会在存入数据库时按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL将忽视这些值,并给出警告

  • 相关阅读:
    单片机模块化程序: 来看看加入环形队列的串口发送数据
    单片机模块化程序: 丢给你个环形队列玩玩
    单片机模块化程序: 你是否还是个小学生时代的串口发送数据
    单片机模块化程序: 关于串口接收处理数据
    单片机模块化程序: 看看是不是你想要的按键处理
    单片机模块化程序: 来看下我的程序架子吧
    ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机每隔一定时间 使用 http 获取天气
    ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机定时 使用 http 获取云端文本文件里面的内容,然后显示在液晶屏
    ESA2GJK1DH1K升级篇: 远程升级准备工作: 使用TCP客户端连接Web服务器实现http下载数据
    ESA2GJK1DH1K升级篇: 远程升级准备工作: 安装Web服务器
  • 原文地址:https://www.cnblogs.com/code-duck/p/13969212.html
Copyright © 2011-2022 走看看