1 所有数据类型
- 数值类型:整数类型TINYINT SMALLINT MEDIUMINT INT BIGINT;浮点小数类型FLOAT DOUBLE;定点小数DECIMAL。
- 日期时间类型:YEAR TIME DATE DATETIME TIMESTAMP。
- 字符串类型:CHAR VARCHAR BINARY VARBINARY BLOB TEXT ENUM SET。
2 数值类型
2.1 整数类型
类型名 | 说明 | 占用空间 | 有符号表示范围 | 无符号表示范围 |
---|---|---|---|---|
TINYINT | 特别小的整数 | 1个字节 | -128~127 | 0~255 |
SMALLINT | 小整数 | 2个字节 | -32768~32767 | 0~65535 |
MEDIUMINT | 中等大小的整数 | 3个字节 | -(2^23)~(2^23 - 1) | 0~(2^24 - 1) |
INT | 整数 | 4个字节 | -(2^31)~(2^31 - 1) | 0~(2^32 - 1) |
BIGINT | 大整数 | 8个字节 | -(2^63)~(2^63 - 1) | 0~(2^64 - 1) |
CREATE TABLE table_name(
id INT(10),
name VARCHAR(20)
);
此处的INT(10)表示的是显示宽度,显示时只显示10位,不足的以空格代替。但是如果有一条记录数据范围超过了10位,依然能够正确显示。
2.2 浮点小数类型和定点小数类型
类型名称 | 说明 | 占用空间 |
---|---|---|
FLOAT | 单精度浮点数 | 4个字节 |
DOUBLE | 双精度浮点数 | 8个字节 |
DECIMAL(M, D) | 定点小数 | M+2个字节 |
DECIMAL(M, D)是定点小数类型:
1. M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
2. D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。
3. 如DECIMAL(5,2) 的最大值为9999.99,因为有7个字节可用。
3 日期和时间类型
类型名称 | 日期格式 | 日期范围 | 占用空间 |
---|---|---|---|
YEAR | YYYY | 1901~2155 | 1个字节 |
TIME | HH:MM:SS | -838:59:59~838:59:59 | 3个字节 |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-3 | 3个字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000… ~ 9999… | 8个字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970… ~ 2018… | 4个字节 |
4 字符串类型
4.1 非二进制字符串类型
类型名称 | 说明 | 存储需求 |
---|---|---|
CHAR(M) | 固定长度非二进制字符串 | M个字节,1 <= M <= 255 |
VARCHAR(M) | 变长非二进制字符串 | L+1个字节,L <= M && 1 <= M <= 255 |
TINYTEXT | 非常短的非二进制字符串 | L+1个字节,L < 2^8 |
TEXT | 短的非二进制字符串 | L+2个字节,L < 2^16 |
MEDIUMTEXT | 中等长度非二进制字符串 | L+3个字节,L < 2^24 |
LONGTEXT | 长的非二进制字符串 | L+4个字节,L < 2 ^ 32 |
ENUM | 枚举 | 1或2个字节 |
SET | 一个设置,字符串对象可以有零个或多个SET成员 | 1,2,3,4或8个字节 |
4.2 二进制类型字符串
类型名称 | 说明 | 存储需求 |
---|---|---|
BIT(M) | 比特位 | 大约(M+7)/8个字节 |
BINARY(M) | 固定长度二进制串 | M个字节 |
VARBINARY(M) | 可变长度二进制串 | M+1个字节 |
TINYBLOB | 非常短的BLOB | L+1个字节,L < 2^8 |
BLOB | 短的BLOB | L+2个字节,L < 2^16 |
MEDIUMBLOB | 中等长度BLOB | L+3个字节,L < 2^24 |
LONGBLOB | 长的BLOB | L+4个字节,L < 2 ^ 32 |
BIN()函数将数字转化为二进制
BLOB是二进制串,用来存储音频、图片等二进制数据;TEXT是非二进制字符串,用来存放纯文本文件,虽然存储文本文件本质上也是存储二进制,但是TEXT会有一个字符集,会转化为可显示字符。
注意点1:浮点数和定点数
浮点数的优势是可以表示更大的范围,更灵活;缺点是容易产生误差,浮点数之间进行比较和减法操作容易出现问题。
定点数确定了小数点位置,不容易产生误差,一般用于对精度要求比较高的数据。
注意点2:CHAR和VARCHAR
CHAR是固定长度,优点是处理速度快,缺点是浪费空间;
VARCHAR是可变长度,优点是节省空间,缺点是处理速度慢。
对于MyISAM存储引擎,最好使用固定长度的数据列,以使整个数据表静态化,从而缩短数据检索时间,用空间换时间;
对于InnoDB存储引擎,推荐使用VARCHAR,因为InnoDB数据表的存储格式不分固定长度和可变长度,所以在检索时间上固定长度和可变长度差不多,所以,使用VARCHAR就比较节省空间了。