文章目录
- [1 常见的数据类型](#1 常见的数据类型)
- [2 整数类型](#2 整数类型)
-
- [2.1 属性 M](#2.1 属性 M)
- [2.2 属性 UNSIGNED](#2.2 属性 UNSIGNED)
- [2.3 属性 ZEROFILL](#2.3 属性 ZEROFILL)
- [2.4 整数类型的适用场景](#2.4 整数类型的适用场景)
- [3 浮点类型](#3 浮点类型)
- [4 定点类型](#4 定点类型)
- [5 位类型](#5 位类型)
- [6 日期与时间类型](#6 日期与时间类型)
-
- [6.1 YEAR 类型](#6.1 YEAR 类型)
- [6.2 DATE 类型](#6.2 DATE 类型)
- [6.3 TIME 类型](#6.3 TIME 类型)
- [6.4 DATETIME 类型](#6.4 DATETIME 类型)
- [6.5 TIMESTAMP 类型](#6.5 TIMESTAMP 类型)
1 常见的数据类型
类型 | 类型分类 |
---|---|
整数类型 | TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT |
浮点类型 | FLOAT、DOUBLE |
定点数类型 | DECIMAL |
位类型 | BIT |
日期时间类型 | YEAR、TIME、DATE、DATETIME、TIMESTAMP |
文本字符串类型 | CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT |
枚举类型 | ENUM |
集合类型 | SET |
二进制字符串类型 | BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB |
JSON类型 | JSON对象 JSON数组 |
2 整数类型
整数类型一共有 5 种:
包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
整数类型 | 字节 | 有符号数取值范围 | 无符号数取值范围 |
---|---|---|---|
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 | -9223372036854775808 - 9223372036854775808 | 0-18446744073709551615 |
2.1 属性 M
在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。M表示显示宽度,M的取值范围是(0, 255)
int(3)、int(4)、int(8) 在磁盘上都 是占用 4 bytes 的存储空间。
int(5):当数据宽度小于5位的时候在数字前面需要用 字符填满宽度。该项功能需要配合" ZEROFILL "使用,表示用"0"填满宽度,否则指定显示宽度无效
2.2 属性 UNSIGNED
无符号类型(非负),所有的整数类型都有一个可选的属性UNSIGNED(无符号属性),
无符号整数类型的最小取值为0。所以,如果需要在MySQL数据库中保存非负整数值时,可以将整数类型设 置为无符号类型。
int类型默认显示宽度为int(11),无符号int类型默认显示宽度为int(10)
2.3 属性 ZEROFILL
ZEROFILL即 0 填充,如果某列是ZEROFILL,那么MySQL会自动为当前列添加UNSIGNED属性,
如果指定了ZEROFILL只是表示不够M位时,用0在左边填充,
如果超过M位,只要不超过数据存储范围即可。
当使用ZEROFILL时,会自动添加UNSIGNED
2.4 整数类型的适用场景
整数类型 | 使用场景 |
---|---|
TINYINT | 一般用于枚举数据 |
SMALLINT | 一般用于较小范围内的数据统计 |
MEDIUMINT | 一般用于较大整数的计算 |
INT | 一般使用的范围比较大,使用频率比较高 |
BIGINT | 一般用于超大型数据的处理 |
3 浮点类型
类型 | 有符号数取值范围 | 无符号数取值范围 | 字节占用数 |
---|---|---|---|
FLOAT | ±3.4∗10^38 | 0 - +3.4∗10^38 | 4 |
DOUBLE | ±1.7∗10^308 | 0 - +1.7∗10^308 | 8 |
对于浮点类型来说,单精度存储需要4个字节,双精度存储需要8个字节
- FLOAT (M,D) 或者 DOUBLE(M,D),M称为精度,D称为标度
- M = 整数位+小数位, D = 小数位
- 取值范围 : 0<=M<=255 , 0<=D<=30
- FLOAT和DOUBLE不指定(M,D)时,默认按照实际的精度来显示
- 从MySQL 8.0.1开始,FLOAT(M,D),DOUBLE(M,D)的用法在官方文档中不推荐使用
4 定点类型
类型 | 字节 | 范围 |
---|---|---|
DECIMAL | M+2 | 有效范围由 M 和 D 决定 |
- 使用 DECIMAL(M,D) 的方式表示高精度小数。其中,M被称为精度,D被称为标度。0<=M<=65, 0<=D<=30,D < M
- DECIMAL(M,D)的最大取值范围与DOUBLE类型一样,但是有效的数据范围是由M和D决定的。 DECIMAL 的存储空间并不是固定的,由精度值M决定,总共占用的存储空间为M+2个字节
- 定点数在MySQL内部是以 字符串 的形式进行存储,这就决定了它一定是精准的
- 当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。当数据的精度超出了定点数类型的 精度范围时,则MySQL同样会进行四舍五入处理
5 位类型
BIT类型中存储的是二进制值,类似010110
二进制字符串类型 | 长度 | 长度范围 |
---|---|---|
BIT | M | 1<=M<=64 |
- BIT类型,如果没有指定(M),默认是1位。这个1位,表示只能存1位的二进制值。这里(M)是表示二进制的位数,位数最小值为1,最大值为64
6 日期与时间类型
类型 | 名称 | 字节 | 日期格式 | 最大值 | 最小值 |
---|---|---|---|---|---|
YEAR | 年 | 1 | YYYY或YY | 1901 | 2155 |
TIME | 时间 | 3 | HH:MM:SS | -838:59:59 | 838:59:59 |
DATE | 日期 | 4 | YYYY-MM-DD | 1001-01-01 | 9999-12-31 |
DATETIME | 日期时间 | 8 | YYYY-MM-DD HH:MM:SS | 1001-01-01 00:00:00 | 9999-12-31 23:59:00 |
TIMESTAMP | 日期时间 | 4 | YYYY或YY | 1901 | 2155 |
6.1 YEAR 类型
YEAR 类型用来表示年份,在所有的日期时间类型中所占用的存储空间最小,只需要 1 个字节 的存储空间
在MySQL中,以4位字符串或者数字格式表示YEAR类型,其格式为YYYY,最小值为1901,最大值为2155