数据类型
-
整数类型
- 主要数据类型
类型名称 说明 存储需求 TINYINT 很小的整数 1字节 SMALLINT 小整数 2字节 MEDIUMINT 中等大小的整数 3字节 INT(INTEGER) 普通大小的整数 4字节 BIGINT 大整数 8字节 - 无符号和有符号的区别,假设 1 字节,无符号则范围为:
0 ~ 2^8
,有符号范围为:-2^7 ~ 2^8
INT(4)
: 显示宽度, 显示宽度和数据类型的取值范围是无关的。显示宽度只是指明MySQL最大可能显示的数字个数,小于指定的宽度会由空格填充,大于宽度只要不大于数据整数的取值范围,数据依然可以插入,而且能够显示。存储范围不会变化,只用于显示
浮点数和定点数类型
- 小数类型和存储需求
类型名称 | 说明 | 存储需求 |
---|---|---|
FLOAT | 单精度浮点数 | 4 个字节 |
DOUBLE | 双精度浮点数 | 8 个字节 |
DECIMAL(M, D), DEC | 压缩的 “ 严格 ” 定点数 | M + 2 个字节 |
float
有符号,1 个符号位,8 个指数位, 23 个尾数位 ( 2^23 大小,精度为 6~7 位)double
有符号, 1个符号位,11个指数位, 52 个尾数 (2^52 大小,精度为 15~16 位)- 浮点和定点类型,指定的精度超出精度范围,则会四舍五入。
FLOAT
和DOUBLE
不指定精度时,默认实际的精度(Hardware 和 System 决定),DECIMAL
默认为(10, 0)
FLOAT(5, 1)
,DOUBLE(10, 1)
,DECIMAL(5, 1)
日期与时间
- 日期和时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
YEAR | YYYY | 1901 ~ 2155 | 1 字节 |
TIME | HH:MM:SS | -839: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-01-01 00:00:00 ~ 9999-12-03 | 8 字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 4 字节 |
YEAR
: 格式为YYYY
, 或'YYYY'
四位数表示则正常, 两位数01~69
表示2001~2069
,70~99
表示1970~1999
, 数字0
表示0
, 字符串0
为2000
TIME
: 格式为HH:MM:SS
,HH
可以表示时间间隔正负大于24TIME
不规则的格式D HH:MM:SS
,D HHMMSS
等,D
表示天数TIME
中间无间隔,数据从SS
取,中间有 “:” 间隔,数据从HH
改。当时分无意义时,插入00:00:00
。INSERT INTO tb_name (CURRENT_TIME), (NOW())
: 插入当前时间DATE
格式为YYYY-MM-DD
或YYYYMMDD
,插入时YY-MM-DD
时YY
见图表CURRENT_DATE
,NOW()
: 当前日期DATETIME
: 格式为YYYY-MM-DD HH:MM:SS
或YYYYMMDDHHMMSS
表示时间- 当前时间
NOW()
TIMESTAMP
: 格式同上,不同的时间区间- 存储为(UTC)时间,存储和检索会根据当前时区进行转换
set time_zone='+10:00'
设置时区变化,SELECT
的结果也会变化
文本字符串类型
非二进制字符串类型
- 类型和说明
类型名称 | 说明 | 存储需求 |
---|---|---|
CHAE(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 个字节 |
CHAR(M)
: 存储时会补空格,取出时去掉右边的空格,即使存储的数据中右边有空格VARCHAR(M)
: 保存空格,长度为实际长度加 1TEXT
类型,一般用于文章内容、评论等ENUM
: 定义格式columeName ENUM('fist', 'second', 'third'
,ENUM
值在内部用整数表示,每个枚举值均有一个索引值,从 1 开始编号。可以包含NULL
,并总有一个默认值。如果有非空限制,则默认为第一个元素SET
: 定义格式SET('first', 'second', 'third')
,插入的时候可以插入子集
二进制字符串类型
- 类型和说明
类型名称 | 说明 | 存储需求 |
---|---|---|
BIT(M) | 位字段类型 | 大约(M+7)/8个字节 |
BINAEY(M) | 固定长度二进制字符串 | M 个字节 |
VARBINARY(M) | 可变长度二进制字符串 | M + 1个字节 |
TINYBLOB(M) | 较小的BLOB | L+1 个字节, L < 2^8 |
BLOB(M) | 小blob | L+2字节,L < 2^16 |
MEDIUMBLOB(M) | 中等大小的BLOB | L+3 字节,L < 2^24 |
LONGBLOB(M) | 中等大的BLOB | L+4 个字节,L < 2^32 |
BIT(M)
: M 表示每个值的位数,范围为 1~64。如果M被省略,默认为 1BINARY
和VARBINARY
记录二进制字符串。BINARY
右边补\0
BLOB
: 二进制大对象,用来存储可变数量的数据。