11. MySQL 的数据类型(2)

目录
文章目录隐藏
  1. 1.日期和时间类型
  2. 2.字符串类型
  3. 3.枚举值类型
  4. 4.二进制类型
  5. 5.小结

这一小节我们继续学习 MySQL 数据库的数据类型上一小节学习了整数类型和浮点类型,本小节介绍日期时间类型和字符串类型。

1.日期和时间类型

类型 大小 格式 范围
date 3 字节 YYYY-MM-DD 1000-01-01 ~ 9999-12-31
time 3-6 字节 HH::MM:SS[.微秒] -838:59:59 ~ 838:59:59
year 1 字节 YYYY 1901 ~ 2155
datetime 5-8 字节 YYYY-MM-DD HH:MM:SS[.微秒值] 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 UTC
timestamp 4-7 字节 YYYY-MM-DD HH:MM:SS[.微秒值] 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC

1.1 date

date 类型为日期类型,存储空间 3 个字节,格式为 “YYYY-MM-DD”,例如 “2020-03-16”,日期的范围 “1000-01-01 ~ 9999-12-31”,通常只想用来存储如 “2020-02-02” 这种格式的日期字段时,可以选择使用 date 类型。

1.2 time

time 类型为时间类型,存储空间 3 ~ 6 个字节,格式为 “HH::MM:SS[.微秒]” ,例如 “04:31:22.33”,范围 “-838:59:59 ~ 838:59:59”,通常只想用来存储如 “04:31:22.33” 这种格式的时间字段时,可以选择使用 time 类型。

1.3 year

year 类型为日期类型,存储空间 1 个字节 ,例如 “2020”,范围 “1901 ~ 2155”,通常只想用来存储如 “2020” 这种格式的日期字段时,可以选择使用 year 类型。

1.4 datetime

datetime 类型为精确时间的日期类型,存储空间为 5 ~ 8 个字节,格式为 “YYYY-MM-DD HH:MM:SS[.微秒值]”,例如 “2020-02-02 02:02:02.02”,范围 “1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 UTC”,通常只想用来存储如 “2020-02-02 02:02:02.02” 这种格式的日期字段时,可以选择使用 datetime 类型。

1.5 timestamp

timestamp 类型保存了从 1970 年 01 月 01 日午夜以来的秒数,它和 UNIX 时间戳相同,存储空间 4 ~ 7 个字节,范围 “1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC”,timestamp 显示的值依赖于时区,和 datetime 相比,前者提供的值与时区有关系,后者则保留文本表示的日期和时间。

2.字符串类型

类型 范围 说明
char 1~255 个字节 固定长度
varchar 字段存储所占字节数不能超过 65535 字节 可变长度
tinytext 最大长度 255 字节 可变长度
text 最大长度 65535 个字节 可变长度
mediumtext 最大长度 16777215 个字节 可变长度
longtext 最大长度 4294967295 个字节 可变长度

2.1 char

char 类型为定长字符串类型,适合存储很短的字符串,或者所有值都接近同一个长度,例如存储密码 md5 值,因为它是一个定长的值,对于经常变更的数据,char 比 varchar 更好,因为定长的 char 不容易产生碎片。

2.2 varchar

varchar 类型用于存储可变长度字符串,是最常见的字符串数据类型,对于短长度的字符串,它比定长的更为节省空间,varchar 节省空间对性能有帮助,varchar 类型的字符串有如下特点 :

  • 字符串列的最大长度比平均长度大;
  • 列的更新少,碎片问题较小;
  • 使用了如 “UTF-8” 字符集,每个字符都使用不同的字节数来存储。

2.3 text

text 数据类型家族包括 : tinytexttextmediumtextlongtext。 MySQL 把每个 text 值当做一个独立的对象处理。若 text 家族的值太大时,InnoDB 存储引擎会额外使用存储区域来进行存储,通常存储文章这样比较长的内容字段时,可选择 text 家族类型。

3.枚举值类型

类型 范围 说明
enum 几何数最大 65535 枚举值类型,只能插入列表中指定的值

3.1 enum

enum 类型为枚举值类型,有时可以使用枚举值替代字符串,枚举列可以把一些不重复的字符串存储为一个预定义的集合。 MySQL 在存储枚举时非常紧凑,会根据列表值的数量压缩到 1 ~ 2 个字节,例如 ENUM (‘黄色’,‘黑色’,‘蓝色’,‘紫色’),枚举值类型字段的需求也可以使用 tinyint 类型来替代。

4.二进制类型

类型 范围 说明
tinyblob 最大长度 255 字节 可变长度
blob 最大长度 65535 个字节 可变长度
mediumblob 最大长度 16777215 个字节 可变长度
longblob 最大长度 4294967295 个字节 可变长度

4.1 blob

blob 数据类型家族包括 :tinybobblobmediumbloblongblob。和 text 家族一样,MySQL 把每个 text 值当做一个独立的对象处理。若 blob 家族的值太大时,InnoDB 存储引擎会额外使用存储区域来进行存储,blob 类型存储的是二进制数据,没有排序规则或字符集。

5.小结

本小节主要介绍了 MySQL 日期时间类型字符串类型,需要注意的是时间类型 TIME、DATETIME、TIMESTAMP 存储大小具体取决于微秒值,例如 TIME 类型,当微秒不存在的时候如 “12:12:12” 字节数为 3 字节(微秒 0 字节)”12:12:12.72″表示微秒 2 位,总共 4 字节(微秒 1 字节),“12:12:12.6173” 表示微秒 4 位,总共 5 字节(微秒 2 字节),“12:12:12.627127” 表示微秒 6 位,总共 6 字节,微秒字节位数对表如下:

微秒位数 大小 举例
0 0 字节 12:12:12
1,2 1 字节 12:12:12.3 或 12:12:12.32
3,4 2 字节 12:12:12.326 或 12:12:12.3653
5,6 3 字节 12:12:12.35812 或 12:12:12.352161

另外还需要注意 char 类型是一种固定长度的类型,varchar 则是一种可变长度的类型,它们的区别是:char(M) 类型的数据列里,每个值都占用 M 个字节,如果某个长度小于 M,MySQL 就会在它的右边用空格字符补足

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 11. MySQL 的数据类型(2)

发表回复