- 数值型
- 整型
- 小数
- 定点数
- 浮点数
- 字符型
- 较短的文本
- 较长的文本
- 日期型
1 整型
整型类型 | 字节 | 范围 |
---|---|---|
TINYINT | 1 | 有符号:-128~127 无符号:0~255 |
SMALLINT | 2 | 有符号:-32768~32767 无符号:0~65535 |
MEDIUMINT | 3 | 有符号:-8388608~8388607 无符号:0~1677215 |
INT 或INTEGER | 4 | 有符号:-2147483648~2147483647 无符号:0~4294967295 |
BIGINT | 8 | 有符号:-9223372036854775808~9223372036854775807 无符号:0~18446744073709551615 |
- 特点:
- 如果不设置无符号还是有符号,默认是有符号(如果想设置无符号,需要添加
UNSIGNED
关键字) - 如果插入的数值超出了整型的范围,会报
out of range
异常,并且插入临界值 - 如果不设置长度,会设置成默认长度,长度代表了显示的最大长度,如果长度不够,会用0填充,但是必须搭配
ZEROFILL
使用,且追加ZEROFILL
关键字后,该字段变成了无符号字段,且无法设定成有符号
- 如果不设置无符号还是有符号,默认是有符号(如果想设置无符号,需要添加
CREATE TABLE testDate (
t1 TINYINT,
t2 SMALLINT UNSIGNED,
t3 MEDIUMINT,
t4 INT (7) ZEROFILL,
t5 BIGINT
);
2 小数
- 浮点数类型
浮点数类型 | 字节 |
---|---|
FLOAT(M,D) | 4 |
DOUBLE(M,D) | 8 |
- 定点数类型
定点数类型 | 字节 |
---|---|
DEC(M,D) 或DECIMAL(M,D) | M + 2 |
- 特点
- M指的是整数部位+小数部位的总位数,D指的是小数部位,超出后按指定长度四舍五入,不足时0补齐
- M和D可以省略
- 如果是
DECIMAL
类型,M默认为10,D默认为0 - 如果是
FLOAT
和DOUBLE
,则会根据插入的数值的精度来决定精度
- 如果是
- 定典型的精度较高,如果要求插入数值的精度较高,如货币运算等则考虑使用
3 字符型
字符串类型 | 最多字符数 | 描述及存储需求 |
---|---|---|
CHAR(M) | M | 固定长度的字符 存储空间固定 性能高 M为0~255之间的整数 可以省略默认为1 |
VARCHAR(M) | M | 可变长度的字符 按实际字符长度分配存储空间 性能低 M为0~65535之间的整数 不可省略 |
4 日期型
日期和时间类型 | 字节 | 最小值 | 最大值 |
---|---|---|---|
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年某个时刻 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
TIMESTAMP
和实际时区相关,更能反映实际的日期,而DATETIME
则只能反映出插入时的当地时间TIMESTAMP
的属性受MySQL版本和SQLMode的影响很大
5 枚举(ENUM)和集合(SET)
ENUM
枚举类型- 要求插入的值必须属于列表中指定的值之一,且不区分大小写
成员数 | 字节数 |
---|---|
1~255 | 1 |
255~65535 | 2 |
SET
集合类型- 可以保存0~64个成员,该类型一次可以选取多个成员
成员数 | 字节数 |
---|---|
1~8 | 1 |
9~16 | 2 |
17~24 | 3 |
25~32 | 4 |
33~64 | 8 |
CREATE TABLE test (
t1 ENUM ('A', 'B'),
t2
SET ('1', '2', '3', '4')
);
INSERT INTO test
VALUE
('a', '1'),
('a', '2,3'),
('a', '2,3,4');
6 其他类型
TEXT
保存长文本BLOB
保存较大的二进制BINARY
和VARBINARY
包含较短的二进制字符串