MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1.日期

表示时间类型的为:DATETIME、DATE、TIMESTAMP、TIME和YEAR。

日期时间类型

占用空间(bytes)

日期格式

描述

零值表示

DATETIME

8

YYYY-MM-DD HH:MM:SS

日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS

范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

0000-00-00 00:00:00

TIMESTAMP

4

YYYY-MM-DD HH:MM:SS

TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS

范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

00000000000000

DATE

3

YYYY-MM-DD

日期。格式:YYYY-MM-DD

注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'

0000-00-00

TIME

3

HH:MM:SS

格式:HH:MM:SS

范围是从 '-838:59:59' 到 '838:59:59'

00:00:00

YEAR

1

YYYY

2 位或 4 位格式的年

4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

0000

备注:

1) DATETIME 和 TIMESTAMP:DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。

在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。

TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。

TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。

DATETIME,不做任何改变,基本上是原样输入和输出。

2.number

MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型

占用空间(bytes)

描述

备注

tinyint

1

范围:(-128,127) (0,255)

小整数值

smallint

2

(-32 768,32 767)

大整数值

mediumint

3

大整数值

int\integer

4

大整数值

bigint

8

极大整数值

float

4

单精度浮点数

double

8

双精度浮点数

decimal

对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

小数值

3.字符串

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型

类型

大小(bytes)

用途

char

0-255

定长字符串

vachar

0-65535

变长字符串

tinyblob

0-255

不超过 255 个字符的二进制字符串

tinytext

0-255

短文本字符串

blob

0-65 535

二进制形式的长文本数据

text

0-65 535

长文本数据

mediumblob

0-16 777 215

二进制形式的中等长度文本数据

mediumtext

0-16 777 215

中等长度文本数据

longblob

0-4 294 967 295

二进制形式的极大文本数据

longtext

0-4 294 967 295

极大文本数据

char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

备注(数据类型中长度的含义):

1). 字符串  常用的字符串类型的数据类型有 CHAR 和 VARCHAR 两种,两者后面都需要跟上一个数字表示长度,例如

char(n),varchar(n),  两者中的 n 含义均为该字段最大可容纳的字符数。(注意早期的版本中,n指的是字节数,你也不需要关注是哪些版本,因为是十多年前的版本了,估计一般人也用不到)。

(1个字符可能是字母或者汉字或者标点符号)

2). 整数类型 常用的整数数据类型有 tinyint ,smallint ,mediumint , int ,bigint 共计5种,在声明列时,后面也可以跟上 n ,例如 int(n) 。实际上这里的 n 非常鸡肋,几乎没有任何使用场景。它的含义是“显示位宽”,这个 n 无论填任何数,不影响存储环节,仅影响在检索时的输出格式,而且在非常严格的情况下才成立。

3).浮点型 FLOAT 类型固定占用4个字节, DOUBLE 类型固定占用8个字节,逻辑和上述的整型类似;DECIMAL 类型,它的定义方式是 DECIMAL(M,D) ,其中 M 表示最大位数,D 表示小数点右侧的位数

例如我们定义 DECIMAL(5,2) ,则表示最大位数为5位,小数点后2位,因此小数点前还剩下3位,于是取值范围为 -999.99至999.99 。存储以字符串存储,比如定义 DECIMAL(3,0) ,存入100时,实际存入的是由字符“1”,“0”,“0”拼接而成的字符串“100”的二进制值,存入时占用3个字节,分别是31,30,30(注意这是十六进制)。

DECIMAL 类型在存储时有补0操作。小数点前不足,向更高位补0,小数点后不足,向更低位补0