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将忽视这些值,并给出警告

  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/code-duck/p/13969212.html
Copyright © 2011-2022 走看看