mysql的数据类型可以分为三大类,分别是数值数据类型、字符串数据类型以及日期时间数据类型。

数值数据类型

数值类型又可以分为整型、浮点类型、Decimal。

整型

mysql的整型可以分为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,下表给出了每个类型的存储空间大小和数值表示范围。

类型

字节

最小值

最大值

(带符号的/无符号的)

(带符号的/无符号的)

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

浮点型

浮点型可以分为单精度(FLOAT)和双精度(DOUBLE),它们可以存储小数,但是存储的是近似值,并不保证精确度。可以使用FLOAT(M,D)或DOUBLE(M,D)来指定浮点数的精度,这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。

DECIMAL

DECIMAL和浮点数一样,可以用来存储小数,但是与浮点数的存储近似值不同,DECIMAL存储的是精确值,我们一样可用DECIMAL(M, D)来指定精度,这里的(M,D)同样表示该值一共显示M位整数,其中D位位于小数点后面。

浮点型 vs Decimal

虽然浮点型和Decimal都可以表示小数,但是Decimal可以精确表示,浮点型是近似表示,以下我们对这个不同举一个例子:

mysql 存储中文最大字符数 mysql最大存储类型_mysql 存储中文最大字符数

可以看到decimal可以精确地表示我们的插入值,但是float却无法精确表示。

字符串型

mysql支持定长字符串和变长字符串两种字符串类型,定长字符串用CHAR(M)表示,M 代表宽度, 0<=M<=255之间;变长字符串用VARCHAR(M)表示,M代表宽度, 0<=M<=65535。定长字符串的速度较变长字符串的速度更快,但是如果存储的字符串长短不一的话,使用定长字符串会造成空间浪费。

日期时间数据类型

mysql常用的日期时间数据类型有DATE、TIME、DATETIME三种类型,这三种类型的表示格式如下:

列类型

表示内容
DATE
YYYY-MM-DD
TIME
hh:mm:ss
DATETIME
YYYY-MM-DD hh:mm:ss