MySQL 的数据类型

news/2024/10/22 18:27:13/

1.整数类型

在这里插入图片描述

1.1 tinyint

tinyint 为小整数类型,存储空间为1个字节(8位),有符号范围-128 ~ 127,无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段,如某一字段 type 表示学科,其中 “type=1” 表示语文,“type=2” 表示数学, “type=3” 表示英语,此时 type 字段即可使用 tinyint 这种存储空间比较小的类型。

1.2 smallint

smallint 为小整数类型,存储空间2个字节(16位),有符号范围 -32768 ~ 32767,无符号范围 0 ~ 65535,当遇到最大值不超过 65535 的整数类型字段时,可使用无符号 smallint 类型。

1.3 mediumint

mediumint 为中整数类型,存储空间3个字节(24位),有符号范围 -8388608 ~ 8388607,符号范围 0 ~ 16777215,当遇到最大值不超过 16777215 的整数类型字段时,可使用无符号 mediumint 类型。

1.4 int

int 为整数类型,存储空间 4 个字节 ( 32位 ),有符号范围 -2147483648 ~ 2147483647,无符号范围 0 ~ 49294967295,当遇到最大值不超过 49294967295 的整数类型字段时,可使用无符号 int 类型,通常自增主键 id 使用 int 类型。

1.5 bigint

bigint 为大整数类型,存储空间8个字节(64位),有符号范围 -9223372036854775808 ~ 9223372036854775807,无符号范围 0 ~ 18446744073709551615,当遇到最大值不超过 18446744073709551615 的整数类型字段时,可使用无符号 bigint 类型,通常自增主键 id 使用 int 无法满足时,可以使用 bigint 类型。

2.浮点类型

在这里插入图片描述

2.1 float

float 为单精度浮点类型,存储空间 4 个字节,支使用标准的浮点运算进行近似计算,若想知道浮点运算是怎么计算的,则需要研究操作系统的浮点数方式,通常对小数精度要求不那么高的字段可使用 float 类型。

2.2 double

double 为双精度浮点类型,存储空间 8个字节,相比float 有更高精度和更大的范围,通常对小数精度要求不那么高,但比 float 要求更高的字段可使用 double 类型。

2.3 decimal

decimal 类型用于存储精确的小数,若使用 float 类型来取代一些需要精确小数点类型的字段时,大的数据量会导致数据错误,比如金额,若使用 float 类型,可能会丢失精度,此时对于金额这样对精度要求很高的字段来说,可以选择使用 decimal 类型。

3日期和时间类型

在这里插入图片描述

3.1 date

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

3.2 time

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

3.3 year

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

3.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 类型。

3.5 timestamp

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

4.字符串类型
在这里插入图片描述

4.1 char

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

4.2 varchar

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

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

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

5.枚举值类型

在这里插入图片描述

5.1 enum

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

6.二进制类型

在这里插入图片描述

6.1 blob

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

7.小结

MySQL 数值类型大小和取值范围,实际应用中要根据字段在业务中实际表示的含义来选择数值字段数据类型,例如年龄字段 age 选择无符号 TINYINT 类型,金额数值对精度要求比较高,所以选择 DECIMAL 类型比较合适,时间戳类型使用 INT,对于数据量比较大的表的自增主键 id 可选择 BIGINT,具体字段类型的选择,还需要根据实际情况来综合分析,合理选择即可,字段的默认值尽量避免 NULL。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 字节,微秒字节位数对表如下:

在这里插入图片描述


http://www.ppmy.cn/news/1538963.html

相关文章

【常用的安装破解版指令】MAC安装破解版软件显示文件损坏时

MAC安装破解版软件显示文件损坏时 复制以下命令粘贴到终端后 sudo xattr -rd com.apple.quarantine 打开Finder(访达),点击左侧的 应用程序,将应用拖进终端中,然后按键盘的回车键(return)&…

selenium的 presence_of_element_located 与 invisibility_of_element_located的区别

presence_of_element_located直到元素出现 invisibility_of_element_located直到元素可见 详解 presence_of_element_located:判断某个元素是否被加到了dom树里,并不代表该元素一定可见;校验程度轻一些,在页面跳转之后判断某种标…

雷池社区版如何使用静态资源的方式建立站点

介绍: SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击。 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、X…

How to assign a default value to a date type field in MySQL

很多时候,由于业务需要,我们期望在mysql 数据库中存储一个日期类型的数据,在创建表的时候,如果期望字段不为空,并给该字段取一个默认值。 mysql 5.7 这是一个看起来很常见的业务诉求,但是mysql数据库在日…

【SQL】分数排名

目录 语法 需求 示例 分析 代码 语法 dense_rank() over (order by score desc) as rank SQL 中的一个窗口函数(Window Function),用于对查询结果集中的行进行排名。这个函数特别适用于需要对某个字段(如分数、销售额等&…

什么叫IDS

什么是IDS? IDS是英文"Intrusion Detection Systems"的缩写,中文意思是"入侵检测系统"。 做一个形象的比喻:假如防火墙是一幢大楼的门锁,那么IDS就是这幢大楼里的监视系统。一旦小偷爬窗进入大楼&#xff0…

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互

在PGSQL中&#xff0c;有的类型是UUID和UUID[]这种类型&#xff0c;在mybatis和这些类型交互的时候需要手动设置类型处理器才可以&#xff0c;这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…

前端的全栈之路:基于 Vue3 + Nest.js 全栈开发的后台应用

☘️ 项目简介 Vue3 Admin 是一个前端基于 Soybean Admin 二次开发&#xff0c;后端基于 Nest.js 的全栈后台应用&#xff0c;适合学习全栈开发的同学参考学习。 &#x1f341; 前端技术栈&#xff1a; Vue3.5、Ant Design Vue、UnoCSS、Pinia &#x1f341; 后端技术栈&…