数据类型
-
整数类型
- 主要数据类型
类型名称 说明 存储需求 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为2000TIME: 格式为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右边补\0BLOB: 二进制大对象,用来存储可变数量的数据。
2678

被折叠的 条评论
为什么被折叠?



