1.数值类型 -- TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、 DECIMAL
2.时间类型 -- DATE、DATETIME、TIMESTAMP
3.字符串类型 – CHAR、VARCHAR、TEXT
4.特有类型 -- ENUM、SET
字符串区分大小写 -- VARBINARY
数据类型
类型分类
表达的范围
存储需求
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
数值整型
-128到127 或 0到255
1个字节
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
-32768到32767 或 0到65535
2个字节
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
-8388608到8388607 或 0到16777215
3个字节
INT[(M)] [UNSIGNED] [ZEROFILL]
-2147483648到2147483647 或 0到4294967295
4个字节
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
-9223372036854775808到9223372036854775807 或 0到18446744073709551615
8个字节
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
数值混合型
整数最大位数(M)为65,小数位数最大(D)为30
变长
DATE
日期类型
YYYY-MM-DD 精确到天
3个字节
DATETIME
YYYY-MM-DD HH:MM:SS(1001年到9999年的范围)
8个字节
TIMESTAMP
YYYY-MM-DD HH:MM:SS(1970年到2037年的范围)
4个字节
ENUM
枚举类型
1到65535个元数据
1个字节或2个字节
SET
集合类型
1到64个元数据
1,2,3,4或8个字节
CHAR(M)
字符串类型
0(建议CHAR(1)外,超过此长度的统一用VARCHAR(M)替代)
M*N个字节,其中N大小由字符集编码,以及是否为中文还是字母数字等有关系
VARCHAR(M)
0个字符
TEXT
64K个字节
所有变长字符串全部使用 VARCHAR 类型,类似于状态,有限类别的字段,也使用可以比较明显表示出实际意义的字符串,而不应该使用INT之类的数字来代替
固定长度的字符串使用 CHAR 类型,所有单个字符的全部使用 CHAR 类型,而不应该使用VARCHAR 类型
当字符数量可能超过 20000 个的时候,可以使用 TEXT 类型来存放字符类数据。所有使用 TEXT 类型的字段必须和原表进行分拆,与原表主键单独组成另外一个表进行存放;
需要精确到时间(年月日时分秒)的字段可以使用DATETIME 或TIMESTAMP,但请注意各自能表达的范围,以及是否需要用到TIMESTAMP的特性,尽量使用TIMESTAMP类型替代DATETIME以减少数据存储空间的占用
只需要精确到天的字段全部使用 DATE 类型,而不应该使用 TIMESTAMP或DATETIME 自增序列特性的字段只能使用 INT 或者 BIGINT,必须明确标识为无符号类型 (关键词:UNSIGNED),除非确实会出现负数,仅当该字段的数值会超过42亿,才使用 BIGINT 类型,并且自增字段必须作为主键或主键的一部分