目录
- 数据类型
- 数值类型
- 字符串类型
- 时间类型
1.数据类型
数据类型是在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称
作用:
对数据进行统一的分类 , 从系统的角度出发是为了能够使用的统一的方式进行管理 ,更好的利用磁盘的空间。
分类:
MySQL 把数据分成了三大类: 数值类型、字符串类型、时间和日期类型
数值类型
类型 | 字节 | 最小值(有符号/无符号) | 最大值(有符号/无符号) | 指数表示 |
tinyint | 1 | -128 / 0 | 127 / 255 | -2 ^7 ~ 2^7 -1 |
smallint | 2 | -32 768 / 0 | 32 767 / 65 535 | -2^15 ~ 2^15 -1 |
mediumint | 3 | -8 388 608 / 0 | 8 388 607 / 16 777 215 | -2^23 ~ 2^23 -1 |
int | 4 | -2 147 483 648 / 0 | 2 147 483 647 / 4 294 967 295 | -2^31 ~ 2^31 -1 |
bigint | 8 | -9,223,372,036,854,775,808 / 0 | 9 223 372 036 854 775 807 / 18 446 744 073 709 551 615 | -2^63 ~ 2^63 -1 |
Mysql 中的数值类型全部默认都是有符号(正负符号)。 如果你的数据不需要使用负号进行显示,此时可以使用无符号的整数, 通过 unsigned 即可表示无符号。 在使用 unsigned 的时候,负数部分会被消除,而相应的负数部分会累加到整数部分,但是数据类型却不会改变
显示宽度
数据最终显示的位数。显示宽度没有特殊的含义,只是默认的告诉用户可以显示的位数而已,这是可以由用户来进行控制的。如果想要使用显示宽度,需要加 zerofill 这个关键字 。 这种控制不会改变数据本身的大小,当位数不够的时候用 0 来填充。
小数型
在 MySQL 里面把小数型有分为了 浮点型和定点型: 浮点型: 小数点浮动,精度有限并且会丢失精度; 定点型: 小数点固定,精度固定并且不会丢失精度
数据类型 | 字节 | 范围 | 含义 |
float(m,d) | 4字节 | ±1.5 × 10E−45 to ±3.4 × 10E38 | 单精度浮点型,7位精度,m是十进制数字的总个数,d是小数点后面的数字个数 |
double(m,d) | 8字节 | ±5.0 × 10 E−324 to ±1.7 × 10E308 | 双精度浮点型,16位精度 |
decimal(m,d) | M+2 | ±1.0 × 10E−28 to ±7.9 × 10E28 | M是数字的最大数(精度)。其范围为1~65,M 的默认值是10。D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。 |
字符串类
varchar 称为变长字符串,在分配空间的时候,按照最大的空间分配,但是实际上用了多少根据具体的数据来确定。
Varchar 后面括号的数字与 char 的含义相同,但是其空间并不会全部占据。 定长与变长区别:
实际存储数据 | Char(4) | Varchar(4) | char所占的字节 | varchar占的字节 |
abcd | abcd | abcd | 4*3 = 12 | 4*3 + 1 = 13 |
a | a | a | 4*3 = 12 | 1*3 + 1 = 4 |
asdfd | 报错 | 报错 | 数据超过长度 | 数据超过长度 |
定长是不智能的,如果是不确定的长度的情况下 就不要使用定长。以下情况可以使用定长来存储:身份证 电话号码 手机号码。 变长是比较智能的,但是效率低一些,适合存储一些不固定长度的数据,比如:地址、文章标题。
文本型
文本类型的使用主要是因为有些时候有大文本需要存储比如:文章。
文本字符串又分成了两类 text 和blob : Text:存储文字(用来存储文章) Blob:存储二进制(不常用)
时间类型
日期和时间类型 | 字节 | 最小值 | 最大值 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 1970-01-01 00:00:01(UTC) | 2038-01-19 03:14:07(UTC) |
TIME | 3 | -838:59:59.000000 | 838:59:59.000000 |
YEAR | 1 | 1000 | 9999 |
Datetime Datetime 用于表示 “年月日 时分秒”,是 Date 和 Time 的组合,并且记录的年份比较长久。如果实际应用中有这样的需求,就可以使用 Datetime 类型。 与之类似的还有 date、time 以及 year,其含义与单词的字面意思相同。如果你的需求是其中之一的话才建议使用。
Timestamp
Timestamp 用于表示“年月日 时分秒”,但是记录的年份比较短暂。 Timestamp 更能反映当前时间: 当插入日期时,会先转换为本地时区后再存放。当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是不一样的。 记录的日期如需让不同时区的人使用,建议使用Timestamp