阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL数据类型 详细讲解

382次阅读
没有评论

共计 4050 个字符,预计需要花费 11 分钟才能阅读完成。

MySQL 数据类型

MySQL 支持多种数据类型,主要有数值类型、日期 / 时间类型和字符串类型。

  1. 数值数据类型:包括整数类型 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、浮点小数数据类型 FLOAT 和 DOUBLE、定点小树类型 DECIMAL。
  2. 日期 / 时间类型:包括 YEAR、TIME、DATE、DATETIME 和 TIMESTAMP。
  3. 字符串类型:包括 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET 等。

    1.1 整数类型

    数值型数据类型主要用来存储数字,MYSQL 提供了多种数值数据类型,不同的数据库有不同的取值范围,可以存储的值范围越大,其所存储的控件也会越大。MySQL 主要提供整数类型有:TINYTINT、SMALLINT、MEDIUMINT、INT、BIGINT。整数类型属性的字段可以添加 AUTO_INCREMENT 自增约束条件。下表列出了 MySQL 中的数值类型。

类型名称说明存储需求
TINYINT很小的整数 1 个字节
SMALLINT小的整数 2 个字节
MEDIUMINT中等大小的整数 3 个字节
INT普通大小的整数 4 个字节
BIGINT大整数 8 个字节

从表可知,不同类型整数存储所需的字节数是不同的,占用字节数最小的是 TINYINT 类型,占用字节最大的是 BIGINT 类型,相应的占用字节越多的类型所能表示的数值范围越大。根据占用字节数可以求出每一种数据的取值范围,例如 TINYINT 需要 1 个字节 (8bits) 来存储,那么 TINYINT 无符号数的最大值为 2^8-1,即 255;TINYINT 有符号数的最大值为 2^7-1,即 127。其它类型如下表所示:

数据类型有符号无符号
TINYINT-128~1270~255
SMALLINT-32768~327670~65535
MEDIUMINT-8388608~83886070~16777215
INT-2147483648~21474836470~4294967295
BIGINT-9223372036854775808~92233720368547758070~18446744073709551615

1.2 浮点数类型和定点数类型

MySQL 中使用浮点数和定点数来表示小数。浮点类型有两种:单精度(FLOAT)和双精度(DOUBLE)。定点类型只有一种:DECIMAL。浮点类型和定点类型都可以用(M,N)来表示,其中 M 称为精度,表示总共的位数;N 称为标度,是表示小数的位数。下表列出了小数类型存储的需求。

类型名称说明存储需求
FLOAT单精度浮点数 4 个字节
DOUBLE双精度浮点数 8 个字节
DECIMAL(M,D),DEC压缩的”严格”定点数M+ 2 个字节

DECIMAL 类型不同于 FLOAT 和 DOUBLE,DECIMAL 实际是以串存放的,DECIMAL 可能的最大取值范围与 DOUBLE 一样,但是其有效的取值范围由 M 和 D 的值决定。如果改变 M 而固定 D,则取值范围将随 M 的变大而变大。

1.3 日期 / 时间类型

MySQL 中有多种表示日期的数据类型,主要有:DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。下表列出了 MySQL 日期 / 时间类型:

类型名称日期格式日期范围存储需求
YEARYYYY1901~2155 1 字节
TIMEHH:MM:SS-838:59:59~838:59:59 3 字节
DATEYYYY-MM-DD1000-01-01~9999-12-3 3 字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23:59:59 8 字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 UTC ~ 2038-01-19 03:14:07 UTC 4 字节

1.4 字符串类型

字符串类型用来存储字符串数据,除了可以存储字符串之外,还可以存储其它数据,比如图片和声音二进制数据。字符串可以进行区分或者不区分大小写的串比较,另外,还可以进行模式匹配查找。MySQL 中字符串类型指 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET。下表列出了字符串数据类型。

类型名称说明存储需求
CHAR(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^32
LONGTEXT大的非二进制字符串L+ 4 字节, 在此 L <2^24
ENUM枚举类型, 只能有一个枚举字符串值 1 或 2 个字节, 取决于枚举值数目(最大值 65535)
SET一个设置, 字符串对象可以有 0 个或多个 SET 成员1,2,3,4 或 8 个字节,取决于集合成员的数量(最多 64 个成员)

1.5 二进制类型

MySQL 支持两类字符型数据:文本字符串和二进制字符串。MySQL 中存储二进制字符串数据类型有:BIT、BINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。下表列出了二进制数据类型:

类型名称说明存储需求
BIT(M)位字段类型大约(M+7)/ 8 个字节
BINARY(M)固定长度二进制字符串 M 个字节
VARBINARY(M)可变长度二进制字符串M+ 1 个字节
TINYBLOB(M)非常小的 BLOBL+ 1 个字节, 在此 L <2^8
BLOB(M)小 BLOBL+ 2 字节, 在此 L <2^16
MEDIUMBLOB(M)中等大小的 BLOBL+ 3 字节, 在此 L <2^24
LONGBLOB(M)非常大的 BLOBL+ 4 字节, 在此 L <2^32

2. 如何选择数据类型

MySQL 提供了大量的数据类型,为了优化存储,提高数据库性能,在任何情况下均应该使用精确的类型。即在所有可以表示该列值的类型中,该类型使用的存储最少。

2.1 整数和浮点数

    如果不需要小数部分,则使用整数来保存数据;如果需要小数部分,则使用浮点数来表示。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,如果列的值范围为 1 -99999,若使用整数,则 MEDIUMINT UNSIGNED 是最好的类型;若需存储小数,则使用 FLOAT 类型。

    浮点类型包括 FLOAT 和 DOUBLE 类型。DOUBLE 类型精度比 FLOAT 类型高,因此,如要求存储精度较高时,应选择 DOUBLE。

2.2 浮点数和定点数

浮点数 FLOAT、DOUBLE 相对于定点数 DECIMAL 的优势是:在长度一定的情况下,浮点数能表示更大的数据范围。但是由于浮点数容易产生误差,因此对精确度要求比较高时,建议使用 DECIMAL 来存储。DECIMAL 在 MySQL 中是以字符串存储的,用于定义货币等对精确度要求较高的数据。DECIMAL 在 MySQL 中是以字符串存储的。在数据迁移中,float(M,D)是非标准 SQL 定义,数据库迁移可能会出现问题,最好不要这样使用。另外两个浮点数进行减法和比较运算时也容易出现问题,因此在进行计算的时候,一定要小心。如果进行数值比较,建议使用 DECIMAL 类型。

2.3 日期 / 时间类型

    MySQL 对于不同种类的日期和时间有多种数据类型,比如 YEAR 和 TIME。如果只需记录年份,则使用 YEAR 即可,如果只记录时间,则使用 TIME 类型。

    如果同时需要记录日期和时间则可以使用 TIMESTAMP 或者 DATETIME 类型。由于 TIMESTAMP 这个列取值时范围小于 DATETIME 的取值范围,因此存储范围较大的日期最好使用 DATETIME。

    TIMESTAMP 也有一个 DATETIME 不具备的属性。默认情况下,当插入一条记录但并没有指定 TIMESTAMP 这个列值时,MySQL 会把 TIMESTAMP 列设为当前的时间。因此需要插入记录同时插入当前时间时,使用 TIMESTAMP 是方便的,另外 TIMESTAMP 在空间上比 DATETIME 更有效。

2.4 CHAR 与 VARCHAR 之间的特点与选择

CHAR 与 VARCHAR 之间的区别:

CHAR 是固定长度字符,VARCHAR 是可变长度字符;CHAR 会自动删除插入数据的尾部空格,VARCHAR 不删除尾部空格。

CHAR 是固定长度,所以它的处理速度比 VARCHAR 速度要快,但是它的缺点就是浪费存储空间。所以对存储不大,但在速度上有要求的可以使用 CHAR 类型,反之可以使用 VARCHAR 类型来实现。


存储引擎对 CHAR 和 VARCHAR 的影响:

    对于 MyISAM 存储引擎,最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用存储空间换查询时间。

    对于 InnoDB 存储引擎:使用可变长的数据列,因为 InnoDB 数据表的存储格式不分固定长度和可变长度,因此使用 CHAR 不一定比使用 VARCHAR 更好,但由于 VARCHAR 是按照实际存的长度存储,比较节省空间,所以对磁盘 I / O 和数据存储总量比较好。

2.5 ENUM 和 SET

    ENUM 只能取单值,它的数据列表示一个枚举集合。它的合法值列表最多有 65535 个成员。因此,在需要从多个值中选取一个时,可以使用 ENUM。比如:性别字段适合定义成 ENUM 类型,每次只能从’男’或‘女’中取一个值。

    SET 可取多值。它的合法取值列表最多允许有 64 个成员。空字符串也是一个合法的 SET 值。在需要取多个值的时候,适合使用 SET 类型,比如:要存储一个兴趣爱好,最好使用 SET 类型。

    ENUM 和 SET 的值是以字符串形式出现的,但在内部,MySQL 以数值的形式存储它们。

2.6 BLOB 和 TEXT

BLOB 是二进制字符串,TEXT 是非二进制字符串,二者均可存放大容量信息。BLOB 主要存储图片、音频信息等,而 TEXT 只能存储纯文本文件,应分清二者存储的关系。

 

 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4050字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7795948
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...