MySQL的数据主要分成三类:数字类型、字符串类型、日期和时间类型。
整形数据类型
数据类型
取值范围
大小(字节)
TINYINT
-127~127/0~255
1
BIT
-127~127/0~255
1
BOOL
-127~127/0~255
1
SMALLINT
-32768~32767/0~65535
2
MEDIUMINT
-8388608~8388607/0~16777215
3
INT
太大不写了
4
BIGINT
太大不写了
8
关键字INT是INTEGER的同义词。
关于TINYINT、BIT、BOOL为什么同时存在,和int(11)的意义,参见《mysql int(3)与int(11)的区别》。
浮点型数据类型
FLOAT占4字节,DOUBLE占8字节。
还有DECIMAL类型。
对于DECIMAL(M,D),如果M>D,占M+2个字节,否则占D+2个字节。例如salary DECIMAL(5,2),5代表十进制数字的数目,2代表在小数点后的数字位数,这里,salary列可以存储的值范围是从-999.99到999.99(似乎还有另外的地方来存符号?)。如果溢出,截短为最大值或最小值。关键字DEC是DECIMAL的同义词。
常规字符串类型
ENUM和SET类型
类型
最大值
说明
ENUM(“value1”,…)
65535
该类型的列只可以容纳所列值之一或者为NULL
SET(“value1”,…)
2^个数-1
该类型的列可以容纳一组值或者为NULL
例如:
CREATE TABLE t(c set('a','b','c'));
a,b,c的权值分别为1,2,4,'a,b'就是3,该列取值范围为[0,7],0就是NULL,其他不合理的值都自动变为NULL。INSERT INTO t VALUES('a,b');等价于INSERT INTO t VALUES(3);。
CREATE TABLE t(c enum('a','b','c'));
a,b,c的权值分别为1,2,3,该列取值范围为[0,3],0就是NULL,其他不合理的值自动变为NULL。INSERT INTO t VALUES('b');等价于INSERT INTO t VALUES(2);。
日期和时间类型
如果赋予类型一个不合法的值,将会被0代替。
类型
取值范围
说明
DATE
1000-01-01~9999-12-31
YYYY-MM-DD
TIME
-838:58:59~835:59:59
HH:MM:SS
DATETIME
1000-01-01 00:00:00——9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
TIMESTAMP
1970-01-01 00:00:00——2037年的某个时间
专有的自动更新特性,格式同DATETIME类型
YEAR(M)
1901~2155
可指定两位数字和四位数字的格式