数值型:

  • 整型: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将忽视这些值,给出警告。