《MySQL》第十二篇 数据类型
目录
- 一. 整数类型
- 二. 浮点类型
- 三. 日期和时间类型
- 四. 字符串类型
- 五. 枚举值类型
- 六. 二进制类型
- 七. 小结

MySQL 支持多种数据类型,学习好数据类型,才能更好的学习 MySQL 表的设计,让表的设计更加合理。
一. 整数类型
类型 | 大小 | SIGNED(有符号) | UNSIGNED(无符号) | 说明 |
---|---|---|---|---|
tinyint | 1字节 | -128~127 | 0~255 | 小整型 |
smallint | 2字节 | -32768~32767 | 0~65535 | 小整型 |
mediumint | 3字节 | -8388608~8388607 | 0~16777215 | 中整型 |
int | 4字节 | -2147483648~2147483647 | 0~49294967295 | 整型 |
bigint | 8字节 | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 | 大整型 |
tinyint
tinyint 为小整数类型,存储空间为1个字节(8位),有符号范围-128 ~ 127,无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段,如某一字段 type 表示学科,其中 “type=1” 表示语文,“type=2” 表示数学, “type=3” 表示英语,此时 type 字段即可使用 tinyint 这种存储空间比较小的类型
smallint
smallint 为小整数类型,存储空间2个字节(16位),有符号范围 -32768 ~ 32767,无符号范围 0 ~ 65535,当遇到最大值不超过 65535 的整数类型字段时,可使用无符号 smallint 类型。
mediumint
mediumint 为中整数类型,存储空间3个字节(24位),有符号范围 -8388608 ~ 8388607,无符号范围 0 ~ 16777215,当遇到最大值不超过 16777215 的整数类型字段时,可使用无符号 mediumint 类型。
int
int 为整数类型,存储空间 4 个字节 ( 32位 ),有符号范围 -2147483648 ~ 2147483647,无符号范围 0 ~ 49294967295,当遇到最大值不超过 49294967295 的整数类型字段时,可使用无符号 int 类型,通常自增主键 id 使用 int 类型。
bigint
bigint 为大整数类型,存储空间8个字节(64位),有符号范围 -9223372036854775808 ~ 9223372036854775807,无符号范围 0 ~ 18446744073709551615,当遇到最大值不超过 18446744073709551615 的整数类型字段时,可使用无符号 bigint 类型,通常自增主键 id 使用 int 无法满足时,可以使用 bigint 类型。
二. 浮点类型
类型 | 大小 | SIGNED(有符号) | UNSIGNED(无符号) | 说明 |
---|---|---|---|---|
float | 4字节 | -3.402823466E+38 ~ -1.175494351E-38,0,1.175494351E-38 ~ 3.402823466351E+38 | 0,1.175494351E-38 ~ 3.402 823 466 E+38 | 单精度浮点型 |
double | 8字节 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308,0,2.2250738585072014E-308 ~ 1.7976931348623157E+308 | 0,2.2250738585072014E-308 ~ 1.797693134862315 7E+308 | 双精度浮点型 |
decimal | 每4个字节存储9个数字,小数点占1字节 | DECIMAL(M,D),取决于M和D,M是整数部分,D是小数部分 | DECIMAL(M,D),取决于M和D,M是整数部分,D是小数部分 | 精确类型,常用来表示金额 |
float
float 为单精度浮点类型,存储空间 4 个字节,支使用标准的浮点运算进行近似计算,若想知道浮点运算是怎么计算的,则需要研究操作系统的浮点数方式,通常对小数精度要求不那么高的字段可使用 float 类型。
double
double 为双精度浮点类型,存储空间 8个字节,相比float 有更高精度和更大的范围,通常对小数精度要求不那么高,但比 float 要求更高的字段可使用 double 类型。
decimal
decimal 类型用于存储精确的小数,若使用 float 类型来取代一些需要精确小数点类型的字段时,大的数据量会导致数据错误,比如金额,若使用 float 类型,可能会丢失精度,此时对于金额这样对精度要求很高的字段来说,可以选择使用 decimal 类型
三. 日期和时间类型
类型 | 大小 | 格式 | 范围 |
---|---|---|---|
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 |
date
date 类型为日期类型,存储空间 3个字节,格式为 “YYYY-MM-DD”,例如 “2020-03-16”,日期的范围 “1000-01-01 ~ 9999-12-31”,通常只想用来存储如 “2020-02-02” 这种格式的日期字段时,可以选择使用 date 类型。
time
time 类型为时间类型,存储空间 3 ~ 6个字节,格式为 “HH::MM:SS[.微秒]” ,例如 “04:31:22.33”,范围 “-838:59:59 ~ 838:59:59”,通常只想用来存储如 “04:31:22.33” 这种格式的时间字段时,可以选择使用 time 类型。
year
year 类型为日期类型,存储空间 1 个字节 ,例如 “2020”,范围 “1901 ~ 2155”,通常只想用来存储如 “2020” 这种格式的日期字段时,可以选择使用 year 类型。
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 类型。
timestamp
timestamp 类型保存了从1970年01月01日午夜以来的秒数,它和 UNIX 时间戳相同,存储空间 4 ~ 7 个字节,范围 “1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC”,timestamp 显示的值依赖于时区,和 datetime 相比,前者提供的值与时区有关系,后者则保留文本表示的日期和时间。
四. 字符串类型
类型 | 范围 | 说明 |
---|---|---|
char | 1~255个字符 | 固定长度 |
varchar | 字段存储所占字节数不能超过65535字节 | 可变长度 |
tinytext | 最大长度255字节 | 可变长度 |
text | 最大长度65535个字节 | 可变长度 |
mediumtext | 最大长度16777215个字节 | 可变长度 |
longtext | 最大长度4294967295个字节 | 可变长度 |
char
char 类型为定长字符串类型,适合存储很短的字符串,或者所有值都接近同一个长度,例如存储密码 md5 值,因为它是一个定长的值,对于经常变更的数据,char 比 varchar 更好,因为定长的 char 不容易产生碎片。
varchar
varchar 类型用于存储可变长度字符串,是最常见的字符串数据类型,对于短长度的字符串,它比定长的更为节省空间,varchar 节省空间对性能有帮助,varchar 类型的字符串有如下特点 :
字符串列的最大长度比平均长度大;
列的更新少,碎片问题较小;
使用了如 “UTF-8” 字符集,每个字符都使用不同的字节数来存储。
text
text 数据类型家族包括 : tinytext、text、mediumtext、longtext。 MySQL 把每个 text 值当做一个独立的对象处理。若 text 家族的值太大时,InnoDB 存储引擎会额外使用存储区域来进行存储,通常存储文章这样比较长的内容字段时,可选择 text 家族类型。
五. 枚举值类型
类型 | 范围 | 说明 |
---|---|---|
enum | 几何数最大65535 | 枚举值类型,只能插入列表中指定的值 |
enum
enum 类型为枚举值类型,有时可以使用枚举值替代字符串,枚举列可以把一些不重复的字符串存储为一个预定义的集合。 MySQL 在存储枚举时非常紧凑,会根据列表值的数量压缩到 1 ~ 2 个字节,例如 ENUM (‘黄色’,‘黑色’,‘蓝色’,‘紫色’),枚举值类型字段的需求也可以使用 tinyint 类型来替代。
六. 二进制类型
类型 | 范围 | 说明 |
---|---|---|
tinyblob | 最大长度255字节 | 可变长度 |
blob | 最大长度65535个字节 | 可变长度 |
mediumblob | 最大长度16777215个字节 | 可变长度 |
longblob | 最大长度4294967295个字节 | 可变长度 |
blob
blob 数据类型家族包括 :tinybob、blob、mediumblob、longblob。和 text 家族一样,MySQL 把每个 text 值当做一个独立的对象处理。若 blob 家族的值太大时,InnoDB 存储引擎会额外使用存储区域来进行存储,blob 类型存储的是二进制数据,没有排序规则或字符集。
七. 小结
- 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 字节,微秒字节位数对表如下:
微秒位数 | 大小 | 举例 |
---|---|---|
0 | 0字节 | 12:12:12 |
1 | 1字节 | 12:12:12.3 或 12:12:12.32 |
3 | 2字节 | 12:12:12.326 或 12:12:12.3653 |
5 | 3字节 | 12:12:12.35812 或 12:12:12.352161 |
- char和varchar的区别
char 类型是一种固定长度的类型,varchar 则是一种可变长度的类型,它们的区别是:char(M) 类型的数据列里,每个值都占用 M 个字节,如果某个长度小于 M,MySQL 就会在它的右边用空格字符补足
相关文章:

《MySQL》第十二篇 数据类型
目录 一. 整数类型二. 浮点类型三. 日期和时间类型四. 字符串类型五. 枚举值类型六. 二进制类型七. 小结 MySQL 支持多种数据类型,学习好数据类型,才能更好的学习 MySQL 表的设计,让表的设计更加合理。 一. 整数类型 类型大小SIGNED(有符号)…...
Python与OpenCV环境中,借助SIFT、单应性、KNN以及Ransac技术进行实现的图像拼接算法详细解析及应用
一、引言 在当今数字化时代,图像处理技术的重要性不言而喻。它在无人驾驶、计算机视觉、人脸识别等领域发挥着关键作用。作为图像处理的一个重要部分,图像拼接算法是实现广阔视野图像的重要手段。今天我们将会讲解在Python和OpenCV环境下,如何使用SIFT、单应性、KNN以及Ran…...

苍穹外卖Day01项目日志
1.软件开发流程和人员分工是怎样的? 软件开发流程 一个软件是怎么被开发出来的? 需求分析 先得知道软件定位人群、用户群体、有什么功能、要实现什么效果等。 需要得到需求规格说明书、产品原型。 需求规格说明书 其中前后端工程师要关注的就是产品原…...
Netty学习(二)
文章目录 二. Netty 入门1. 概述1.1 Netty 是什么?1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势 2. Hello World2.1 目标加入依赖 2.2 服务器端2.3 客户端2.4 流程梳理课堂示例服务端客户端 分析提示(重要) 3. 组件3.1 EventLoop事件循…...

ReactRouterv5在BrowserRouter和HashRouter模式下对location.state的支持
结论:HashRouter不支持location.state 文档:ReactRouter v5 从文档可看到history.push()方法支持2个参数:path, [state] state即是location.state,常用于隐式地传递状态参数 但文档未提的是,仅适用于BrowserRouter&am…...
Aerotech系列文章(3)运动设置命令Motion Setup Commands
1.运动设置命令Motion Setup Commands 斜坡类型: 直线,S曲线,与正弦曲线 Enumerator: RAMPTYPE_Linear Linear-based ramp type. RAMPTYPE_Scurve S-curve-based ramp type. RAMPTYPE_Sine Sine-based ramp type. 函数原型&a…...

线性神经网络——softmax 回归随笔【深度学习】【PyTorch】【d2l】
文章目录 3.2、softmax 回归3.2.1、softmax运算3.2.2、交叉熵损失函数3.2.3、PyTorch 从零实现 softmax 回归3.2.4、简单实现 softmax 回归 3.2、softmax 回归 3.2.1、softmax运算 softmax 函数是一种常用的激活函数,用于将实数向量转换为概率分布向量。它在多类别…...

【Nodejs】Node.js开发环境安装
1.版本介绍 在命令窗口中输入 node -v 可以查看版本 0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性(比4.x多些),属于过渡产品,现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特性8.x 支持 ES6 特性 2.No…...
梅尔频谱(Mel spectrum)简介及Python实现
梅尔频谱(Mel spectrum)简介及Python实现 1. 梅尔频谱(Mel spectrum)简介2. Python可视化测试3.频谱可视化3.1 Mel 频谱可视化3.2 STFT spectrum参考文献资料1. 梅尔频谱(Mel spectrum)简介 在信号处理上,声信号(噪声信号)是一种重要的传感监测手段。对于语音分类任务…...

【数据结构】实验六:队列
实验六 队列 一、实验目的与要求 1)熟悉C/C语言(或其他编程语言)的集成开发环境; 2)通过本实验加深对队列的理解,熟悉基本操作; 3) 结合具体的问题分析算法时间复杂度。 二、…...

【Linux线程】第一章||理解线程概念+创建一个线程(附代码加讲解)
线程概念 🌵什么是线程🌲线程和进程的关系🎄线程有以下特点:🌳 线程的优点🌴 线程的缺点🌱线程异常🌿线程用途 ☘️手动创建一个进程🍀运行 🌵什么是线程 在L…...
Android进阶之微信扫码登录
遇到新需求要搭建微信扫码登录功能,这篇文章是随着我的编码过程一并写的,希望能够帮助有需求的人和以后再次用到此功能的自己。 首先想到的就是百度各种文章,当然去开发者平台申请AppID和密钥是必不可少的,等注册好发现需要创建应用以及审核(要官网,流程图及其他信息),想着先写…...

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像
macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Lin…...

Unity自定义后处理——用偏导数求图片颜色边缘
大家好,我是阿赵。 继续介绍屏幕后处理效果的做法。这次介绍一下用偏导数求图形边缘的技术。 一、原理介绍 先来看例子吧。 这个例子看起来好像是要给模型描边。之前其实也介绍过很多描边的方法,比如沿着法线方向放大模型,或者用Ndo…...

本地Git仓库和GitHub仓库SSH传输
SSH创建命令解释 ssh-keygen 用于创建密钥的程序 -m PEM 将密钥的格式设为 PEM -t rsa 要创建的密钥类型,本例中为 RSA 格式 -b 4096 密钥的位数,本例中为 4096 -C “azureusermyserver” 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址…...

【C++11】——右值引用、移动语义
目录 1. 基本概念 1.1 左值与左值引用 1.2 右值和右值引用 1.3 左值引用与右值引用 2. 右值引用实用场景和意义 2.1 左值引用的使用场景 2.2 左值引用的短板 2.3 右值引用和移动语义 2.3.1 移动构造 2.3.2 移动赋值 2.3.3 编译器做的优化 2.3.4 总结 2.4 右值引用…...

消息服务概述
消息服务的作用: 在多数应用尤其是分布式系统中,消息服务是不可或缺的重要部分,它使用起来比较简单,同时解决了不少难题,例如异步处理、应用解耦、流量削锋、分布式事务管理等,使用消息服务可以实现一个高…...

【Spring Boot】Web开发 — 数据验证
Web开发 — 数据验证 对于应用系统而言,任何客户端传入的数据都不是绝对安全有效的,这就要求我们在服务端接收到数据时也对数据的有效性进行验证,以确保传入的数据安全正确。接下来介绍Spring Boot是如何实现数据验证的。 1.Hibernate Vali…...

技术分享 | App常见bug解析
功能Bug 内容显示错误 前端页面展示的内容有误。 这种错误的产生有两种可能 1、前端代码写的文案错误 2、接口返回值错误 功能错误 功能错误是在测试过程中最常见的类型之一,也就是产品的功能没有实现。比如图中的公众号登录不成功的问题。 界面展示错乱 产…...
树莓派Pico|RP2040|使用SWD进行调试|构建 “Hello World“ debug版本
文章目录 使用SWD进行调试构建 "Hello World" debug版本安装 GDB使用 GDB 和 OpenOCD 来 debug Hello World TIP重要提示 使用SWD进行调试 基于rp2040的板上的SWD端口重置,加载和运行代码,如树莓派Pico可用于交互式调试已加载的程序。这包括:…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...