MySQL 支持的数据类型 大致分为数值类型 字符串类型 日期和时间类型 复合类型

数值类型

类型 字节 范围(有符号) 范围(无符号)
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 (-9233372036854775808,9223372036854775807) (0,18446744073709551615)
FLOAT 4 (-3.402823466 E+38,1.175494351 E-38),0,(1.175494351 E-38,3.402823466351 E+38) 0,(1.175494351 E-38,3.402823466 E+38)
DOUBLE 8 (1.7976931348623157 E+308,2.2250738585072014 E-308),0,(2.2250738585072014 E-308,1.7976931348623157 E+308) 0,(2.2250738585072014 E-308,1.7976931348623157 E+308)

注:
1、整数 带有 1 个显示宽度指示器。当从数据库检索一个值时,可以把这个值加长到指定的长度。
例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。
需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。
2、MySQL 会在不合规定的值插入表前自动修改为 0。
3、浮点数 带有 2 个附加参数:一个显示宽度指示器和一个小数点指示器。
例如语句 FLOAT(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 3 位数字。

字符串类型

类型 字节大小 描述及存储需求
CHAR 0-255 字节 定长字符串
VARCHAR 0-255 字节 变长字符串
TINYBLOB 0-255 字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 字节 短文本字符串
BLOB 0-65535 字节 二进制形式的长文本数据
TEXT 0-65535 字节 长文本数据
MEDIUMBLOB 0-16777215 字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16777215 字节 中等长度文本数据
LOGNGBLOB 0-4294967295 字节 二进制形式的极大文本数据
LONGTEXT 0-4294967295 字节 极大文本数据

注:
1、VARCHAR 会增加一个额外字节来存储字符串本身的长度。
2、TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。

日期和时间类型

类型 字节 范围 格式
DATE 4 1000-01-01/9999-12-31 YYYY-MM-DD
TIME 3 -838:59:59’/‘838:59:59 HH:MM:SS
YEAR 1 1901/2155 YYYY
DATETIME 8 1000-01-01/9999-12-31 YYYY-MM-DD HH:MM:SS
TIMESTAMP 4 1970-01-01/2037 年 YYYYMMDD HHMMSS

注:
1、没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。
2、如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。

复合类型

ENUM 类型:从一个集合中取得一个值
SET 类型:从一个集合中取得任意多个值