数值型:

  • 整型:tinyint,smallint,mediumint,int/Integer,bigint
  • 小数:定点数decimal,浮点数float(单精度浮点数) double(双精度浮点数)

字符型:char,varchar,binary,varbinary,blob,text,enum和set等

日期/时间类型:year,time,date,datetime和timestamp

 

数值类型

整型:

类型名称 说明 存储需求 无符号范围 有符号范围
tinyint 很小的整数 1个字节 0〜255 -128〜127
smallint 小的整数 2个字节 0〜65535 -32768〜32767
mediumint 中等大小的整数 3个字节 0〜16777215 -8388608〜8388607
int(Integer) 普通大小的整数 4个字节 0〜4294967295 -2147483648〜2147483647
bigint 大整数 8个字节 0〜18446744073709551615 -9223372036854775808〜9223372036854775807

 

 

 

 

 

 

 

特点:

  • 如果不设置无符号还是有符号,默认是有符号。如果想设置无符号,则需要添加unsigned关键字。
  • 如果插入的数值超出了整型范围,会报out of range异常,并且插入临界值。
  • 如果不设置长度,会有默认的长度。长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用。

 

小数:

小数可以使用浮点数和定点数来表示。浮点类型有两种,分别是单精度浮点数(float)和双精度浮点数(double);定点数类型只有一种,就是decimal。

浮点类型和定点类型都可以用(M,D)来表示,其中M为精度,表示总共的位数;D为标度,表示小数的位数。浮点数类型的取值范围为M(1~255)和D(1~30,且不能大约M-2),分别表示显示宽度和小数位数。M和D在float和double中是可选的,float和double类型将被保存为硬件所支持的最大精度。decimal的默认D值是0,M值为10。

类型名称 说明 存储需求
float 单精度浮点数 4个字节
double 双精度浮点数 8个字节
decimal(M,D) 压缩的"严格"定点数 M+2个字节

 

 

 

 

 

特点:

  • M:整数部分位数+小数部分位数;D:小数部分保留位数。如果超过了范围,则插入临界值。
  • M和D都可以省略。如果是decimal,则M默认为10,D默认为0;如果是float和double,则会根据插入的数值的精度来决定。
  • 定点型的精确度较高,如果要求插入数值的精度要求较高,则使用decimal。如货币运算。

 

字符类型

字符类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符类型有char、varchar、tinytext、text、mediumtext、longtext、enum、set等。

类型名称说明存储需求
CHAR(M) 固定长度非二进制字符串 M 字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

char和varchar区别:

char(M)为固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。M表示列的长度,范围是0~255个字符。

varchar(M)是长度可变的字符串,M表示最大列的长度,M的范围是0~65535.varchar的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加1。

  写法 M的意思 特点 空间的耗费 效率
char char(M) 最大字符数,可省略,默认为1 固定长度的字符 比较耗费
varchar varchar(M) 最大字符数,不可省略 可变长度的字符 比较节省

 

 

 

 

text类型

text列保存非二进制字符串。如文章内容、评论等。当保存或查询text列的值时,不删除尾部空格。

text类型分为4种:tinytext、text、mediumtext和longtext。不同的text类型的存储空间和数据长度不同。

  • tinytext表示长度为255字符的text列
  • text表示长度为65535字符的text列
  • mediumtext表示长度为16777215字符的text列。
  • longtext表示长度为4294967295或4GB字符的text列。

enum类型

enum类型是枚举类型,要求插入的值必须属于列表中的指定的值之一。

enum类型的字段在取值时,能在指定的枚举列表中获取,而且一次只能取一个。如果创建的成员中有空格,尾部的空格将自动被删除。

enum值在内部用整数表示,每个枚举值均有一个索引值;列表值所允许的成员值从1开始编号,mysql存储的就是这个索引编号,枚举最多可以有65535个元素。

<字段名> ENUM('值1','值2',...'值n')

注意:enum列总有一个默认值。如果将enum列声明为null,null值则为该列的一个有效值,并且默认值为null。如果enum列被声明为not null,其默认值为允许的值列表的第一个元素。

set类型

set可以有0或多个值,set列最多可以有64个成员,值为表创建时规定的一列值。指定包括多个set成员的set列值时,各成员之间用逗号,隔开。

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

与enum类型不同的是,enum类型的字段只能从定义的列值中选择一个值插入,而set类型的列可从定义的列值中选择多个字符联合。

注意:如果插入set字段中的列值有重复,则mysql自动删除重复的值;插入set字段的值的顺序并不重要,mysql会在存入数据库时,按照定义的顺序显示;如果插入了不正确的值,默认情况下,mysql将忽视这些值,给出警告。

 

 posted on 2020-08-04 14:11  会飞的金鱼  阅读(352)  评论(0)    收藏  举报