深入浅出MySQL-02-【MySQL支持的数据类型】

news2024/11/20 10:40:24

文章目录

  • 前言
  • 1.数值类型
  • 2.日期时间类型
  • 3.字符串类型
    • 3.1.CHAR和VARCHAR类型
    • 3.2.ENUM类型
    • 3.3.SET类型
  • 4.JSON类型

前言

环境:

  • Windows11
  • MySQL-8.0.35

1.数值类型

MySQL中的数值类型,如下:

整数类型字节最小值最大值
TINYINT1有符号 -128
无符号 0
有符号 127
无符号 255
SMALLINT2有符号 -32768
无符号 0
有符号 32767
无符号 65535
MEDIUMINT3有符号 -8388608
无符号 0
有符号 8388607
无符号 1677215
INT、INTEGER4有符号 -2147483648
无符号 0
有符号 2147483647
无符号 4294967295
BIGINT8有符号 -9223372036854775808
无符号 0
有符号 9223372036854775807
无符号 18446744073709551615
浮点数类型字节最小值最大值
FLOAT4±1.175494351E-38±3.402823466E+38
DOUBLE8±2.2250738585072014E-308±1.7976931348623157E+308
定点数类型字节描述
DEC(M,D)M+2
DECIMAL(M,D)
M+2最大取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定
位类型字节最小值最大值
BIT(M)1~8BIT(1)BIT(64)

整数型,例如 int(5) 表示数值宽度小于5位的时候在数字前面填满宽度,如果不显示宽度,则默认为 int(11)。一般配合zerofill使用,也就是数字位数不够的时候,在前面的空间填充字符“0”。

注意:我自己测试的,应该是数据库版本问题,int类型不指定宽度,默认是 int(10) 的宽度,下面的测试也可以看出。

测试zerofill和int的配合示例,如下:

在这里插入图片描述
可以发现,字段id1和id2前面的空间都填充了0,可能有疑问,如果实际插入的值超过了设置的宽度呢?答案是不会对插入的值有任何影响,还是按照实际的值和精度保存,此时宽度没有任何意义了,左边也没有空间并不会填充任何0,看下面测试:

在这里插入图片描述
id2的int宽度虽然设置 5,但是实际插入的宽度都是 8了,并没有影响还是插入了。

所有的整数类型都有一个可选属性UNSIGNED(无符号),如果字段设置了这个属性,取值范围是正常值的下限取0,上线取原来值的2倍。例如tinyint的有符号取值范围是 -128~127,而无符号的取值范围是 0 ~ 255。

如果一个列指定了 zerofill,MySQL默认为该列加上 UNSIGNED属性。

整数还有一个属性,AUTO_INCREMENT,只能用于整数类型,一般从1开始,每行+1。一个表中最多只能有一个 AUTO_INCREMENT的列。对于任何想要使用这个属性的列,应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为 UNIQUE 键。

对于小数,MySQL分为 浮点数 和 定点数,浮点数包括 float 单精度 和 double 双精度,而定点数只有 decimal 一种表示。定点数在MySQL内部是以字符串的形式保存的,比浮点数更准确。

浮点数 和 定点数,类型后面的 (M,D),表示该数值一共显示M位数字(整数位+小数位),D表示精度,也就是几位小数。M和D又称为精度和标度。

浮点数不指定精度(精度和标度)时,会按照实际来显示,而decimal不指定精度(精度和标度),默认整数位和小数位为(10,0)。

示例:

类型➡️
测试⬇️
float(5,2)double(5,2)decimal(5,2)
都插入1.231.231.231.23
float和double插入1.236,decimal插入1.231.241.241.23
float和double插入1.234,decimal插入1.231.231.231.23
都插入1.234,参考下图1.231.231.23
三个字段去掉精度,再次都插入1.23,参考下图1.231.231
三个字段去掉精度,再次都插入1.67,参考下图1.671.672

都插入1.234的示例截图如下:

在这里插入图片描述
虽然插入成功了,但是decimal类型的插入返回了警告信息,报告id3被截断。

三个字段去掉精度,都插入1.23示例截图如下:

在这里插入图片描述
仔细看上图,插入的时候依然返回了警告,同上上图中的警告是一样的,id3的值被截断。

三个字段去掉精度,再次都插入1.67的示例截图:

在这里插入图片描述

上面的表格示例以及截图说明:

  • 浮点数不写精度和标度,按照实际精度和标度值展示,指定精度和标度的,标度超出会按照四舍五入后的结果插入。
  • decimal不写精度默认和标度,就是 (10,0),标度超出的会进行四舍五入,然后截断并返回警告。

上面测试的都是标度超出的处理结果,如果精度超出了会怎么样呢?如下:

在这里插入图片描述

对于 位类型 ,这里不多做解释,自行百度。

2.日期时间类型

MySQL中支持的日期时间类型,如下:

日期和时间类型字节最小值最大值
DATE41000-01-019999-12-31
DATETIME81000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMP4197001010800012038年的某个时刻
TIME3-838:59:59838:59:59
YEAR119012155

这些类型的区别:

  • 表示年月日,使用DATE。
  • 表示年月日时分秒,使用DATETIME或者TIMESTAMP,但是两者存在区别,后续说明。
  • 表示时分秒,使用TIME。
  • 表示年份,使用YEAR,比DATE占用空间少。YEAR有2位和4位格式的年表示,默认4位的,允许的值是1901~2155和0000。2位格式中,允许的值是 70~69,表示1970到2069年。MySQL版本从5.5.27开始不再支持2位的表示了
  • DATE、TIME 和 DATETIME是经常使用的三种时间格式。

TIMESTAMP 和 DATETIME的区别,百度看了下,很详细,其实主要还是 TIMESTAMP和时区有关且范围比较小。这里不做详细测试和说明了。

3.字符串类型

MySQL中的字符串类型:

字符串类型字节描述以及存储需求
CHAR(M)MM为0~255之间的整数
VARCHAR(M)M为0~65535之间的整数,值的长度+1个字节
TINYBLOB允许长度 0~255字节,值的长度+1个字节
BLOB允许长度0~65535字节, 值的长度+2个字节
MEDIUMBLOB允许长度0~167772150字节, 值的长度+3个字节
LONGBLOB
TINYTEXT允许长度 0~255字节,值的长度+2个字节
TEXT允许长度0~65535字节, 值的长度+2个字节
MEDIUMTEXT允许长度0~167772150字节, 值的长度+3个字节
LONGTEXT允许长度0~4294967295字节, 值的长度+4个字节
VARBINARY(M)允许长度0~M个字节的变长字节字符串,值的长度+1个字节
BINARY()M允许长度0~M个字节的定长字节字符串

3.1.CHAR和VARCHAR类型

很类似,都是保存较短的字符串,主要区别是存储方式不同:

  • CHAR的长度固定为创建的时候生命的长度,可以从0~255的任意整数。
  • VARCHAR的长度为可变长度,可以从0~65535之间的任意整数。
  • 检索的时候,CHAR列删除尾部的空格,例如 char(4) 插入 'ab ',实际存入的是 ‘ab’,后面的两个空格没有了。而VARCHAR则保留这些空格,varchar(4) 插入 'ab ',实际存入的就是 'ab '。

3.2.ENUM类型

枚举类型,取值范围需要在创建表的时候通过枚举方式显示指定,测试如下:
在这里插入图片描述
如上图可以看出:

  • ENUM类型是忽略大小写的,存入M和f的时候,都转成了大写。
  • 对于插入一个ENUM范围中不存在的值的时候,没有返回警告和报错,而是插入ENUM范围中的第一个值。需要特别注意。
  • ENUM类型只允许从值的集合中选取单个值,不能一次取多个值。

3.3.SET类型

  • 和ENUM类型相似,最主要区别是SET类型一次可以取多个值,而ENUM只能选取一个值。
  • SET类型的取值多个,只要是范围内的就可以,不是范围内的不允许插入。
  • 如果多个取值中存在重复的,例如 ‘a,b,a’,最终写入的结果会去重,也就是 ‘a,b’。需要特别注意

4.JSON类型

MySQL自5.7.8版本开始支持JSON类型,之前都是通过VARCHAR或者TEXT来保存JSON格式的数据,JSON类型特点:

  • JSON类型字段会自动校验是否为JSON格式,如果不是就会报错。
  • MySQL提供了一组操作JSON数据的内置函数,可以方便的提取各类数据,可以修改特定的键值。
  • 优化的存储格式,存储在JSON列中的JSON数据,被转换成内部的存储格式,允许快速读取。

一个JSON元素中,可以是六中类型元素的任意组合,这六中类型是NUMBER、STRING、BOOLEAN、NULL、ARRAY 和 OBJECT。

其中BOOLEAN使用true和false的字面值文本表示。NULL使用NULL的文本AR表示。字符串和日期类型都是使用双引号引起来表示。ARRAY要用中括号引起来。OBJECT的KV要用大括号引起来,其中KEY也要用双引号引起来。下面是几个正确的示例:

// array
["abc", 10, null, true, false]
// object
{"k1": "value1", "k2": 10}
// 
["12:18:29.000000", "2024-04-23", "2024-04-23 16:47:00.000000"]

ARRAY 和 OBJECT 还可以互相嵌套,这个不难理解。

在这里插入图片描述

如上图,正确的json数据被插入,错误的会直接报错。

通过 json_type函数可以查看插入的json数据是哪种类型,如下图:

在这里插入图片描述
json数据类型对于大小写是敏感的(因为json的默认排序规则是utf8mb4_bin),‘x’和‘X’是不同的两个json数据,常见的null、true、false必须是小写的才合法。

通过json_valid函数判断一个json是否合法,如下:

在这里插入图片描述
如果json数据中的value中字符串包含双引号或者单引号,需要使用反斜杠进行转义,例如插入value为 ab"c 的值,如下:
在这里插入图片描述
如上,双反斜杠表示一个反斜杠。类似json_valid 和 json_type等函数,这都是MySQL提供的json相关的函数操作,在后面的深入浅出MySQL-04-【常用函数】中进行说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应,即使设置参数默认值,也不可省略。 2.只知道类名,需要将该类作为参数调用泛型接口。 3.只知道类名,需要将该类的数组作为参数调用泛型接口…

基于51单片机的电梯仿真系统

基于51单片机的电梯设计 (仿真+程序PPT) 功能介绍 具体功能: 1.一共4层,数码管显示当前楼层; 2.六个按键模拟电梯外按键(1上、2上、2下、3上、3下、4下),每当按下时有…

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签,H5的兼容性处理) 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签(HTML元素)和属性,标签定义了内容的类型或结构,而…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现,通常是ETCD、NACOS、ZOOKEEPER等等,但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式,接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图: Red…

多端文件互传软件-LocalSend

一、前言 日常学习或者是工作需求,需要手机和电脑互传文件。用到频率低的话,使用即时通讯软件也就够了。 像我日常使用的多端互传文件软件是LocalSend。 二、 LocalSend LocalSend是一款基于局域网的文件传输工具。 LocalSend是一种用于在本地网络中…

系统盘空间不足调优方式1-APPData/大文件清理

作者:私语茶馆 1.前言 Windows系统盘(C盘)很容易剩余空间不足,这种情况下会非常影响Windows系统的运行,系统盘约束非常多,不方便在线扩容,因此规划和利用好系统盘是保障整体运行效率的关键。包…

经典机器学习算法——Pagerank算法

目录 Pagerank介绍 背景介绍 中心思想 一、量化重要性 三大指标 1、数量指标 2、质量指标 3、稀释指标 二、实际应用简化为理论模型 PageRank公式 手动预测网站的重要度 马尔可夫矩阵预测网站的重要度 两个方法的联系 PageRank算法存在的问题 一、Dead Ends问题…

XTuner微调LLM:1.8B、多模态和Agent-笔记四

本次课程由XTuner 贡献者李剑锋、汪周谦、王群老师讲解【XTuner 微调 LLM:1.8B、多模态和 Agent】课程 课程视频:http:// https://b23.tv/QUhT6ni 课程文档:https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 两种Finetun…

web题目实操 5(备份文件和关于MD5($pass,true)注入的学习)

1.[ACTF2020 新生赛]BackupFile (1)打开页面后根据提示是备份文件 (2)查看源码发现啥都没有 (3)这里啊直接用工具扫描,可以扫描到一个文件名为:/index.php.bak的文件 (…

使用Docker部署Jupyter Notebook并结合花生壳的内网穿透实现远程访问(详文)

一、前言 本文主要介绍如何利用宝塔面板中的Docker 3.9.3管理器,使用Docker本地部署Jupyter Notebook,并结合花生壳内网穿透工具实现任意浏览器公网远程访问Jupyter登录界面。 安装完成后在宝塔面板中图例 Jupyter Notebook是一个交互式笔记本,支持运行40多种编程语言。…

D - Grid and Magnet

思路&#xff1a;标记一下磁铁周围的空地即可&#xff0c;每个连通块一定可以互相到达&#xff0c;我们dfs算出联通块的大小再加上该连通块周围的可达磁场区域即可。 代码&#xff1a; #include <bits/stdc.h> using namespace std; using ll long long; using ld lon…

【Godot4.2】自定义Todo清单类 - myTodoList

概述 在写myList类的时候&#xff0c;就想到可以写一个类似的Todo清单类。 基础思路 本质还是在内部维护一个数组&#xff0c;在其基础上进行增删改查操作的封装为了方便存储数据&#xff0c;编写一个自定义内置类TodoItem&#xff0c;内部数组就变成了Array[TodoItem]类型的…

66、二分-搜索旋转排序数组

思路&#xff1a; 不断二分&#xff0c;首先判断左侧有序还是右侧有序&#xff0c;如果左侧有序那么就在左侧寻找&#xff0c;如果右侧有序那就在右侧寻找。假设左侧有序&#xff0c;那就判断目标值在不在左侧&#xff0c;如果在左侧继续左侧二分。如果不在左侧&#xff0c;那么…

Redis可视化工具RedisInsight

下载地址&#xff1a;RedisInsight - The Best Redis GUIRedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your databases and manage your data.https://redis.com/redis-enterprise/redis-insight/#insight…

STM32通过ESP8266连接阿里云 详细步骤

一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是&#xff1a;AT固件。连接阿里云需要&#xff1a;MQTT固件。 因此&#xff0c;我们需要给8266重新烧录 MQTT固件。 针对“魔女开发板&#xff0c;ESP8266模块烧录MQTT固件&#xff0c;图解教程如下&#xff1a; ESP8266 烧录 …

Spring Task学习记录

介绍 cron表达式 cron表达式在线生成器 链接: link 入门案例 Component Slf4j public class MyTask {/*** 定时任务 每隔5秒触发1次*/Scheduled(cron "0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行&#xff1a;{}", new Date…

什么是外汇爆仓?怎样避免?

外汇爆仓是指当交易者的保证金低于特定比例时&#xff0c;经纪商会自动平仓一个或所有的开仓头寸。避免外汇爆仓的关键在于合理配置资金、设置止损、适度交易、顺势而为以及调整心态。 外汇爆仓是外汇交易中的一种风险控制机制。当交易者的账户净值低于已用保证金的特定比例时&…

C语言 基本数据类型及大小

一、基本数据类型 1.整型int 整型的关键字是int&#xff0c;定义一个整型变量时&#xff0c;只需要用int来修饰即可。也分为短整型和长整型。 2.浮点型 浮点型又分单精度浮点型float和双精度浮点型double。 3.字符型char 前面的整型和浮点型都是用于存放数字。字符型&…

考研数学|跟完武忠祥基础,刷题还是看张宇基础❓

听完武忠祥老师的课程&#xff0c;当然是趁热打铁&#xff0c;多练题&#xff0c;巩固做题技巧 首先&#xff0c;武忠祥老师和张宇老师在基础阶段的课程质量基本是差不多的&#xff0c;如果你听完武忠祥老师的课程&#xff0c;并且基本都听懂了&#xff0c;真的没有必要再去浪…

Autosar MCAL-RH850P1HC Fls配置

文章目录 FlsFlsGeneralFlsAcLoadOnJobStartFlsBaseAddressFlsBlankCheckApiFlsCancelApiFlsCompareApiFlsCopySupportedFlsCriticalSectionProtectionFlsDevErrorDetectFlsDeviceNameFlsDriverIndexFlsFaciEccCheckFlsGetJobResultApiFlsGetStatusApiFlsLoopCountFlsReadImmed…