【MySQL】数据库数据类型
文章目录
- 1. 整体概要
- 2. 数值类型
- (有符号) tinyint 创建表
- (无符号) tinyint 创建表
- bit类型
- float 类型
- (无符号)float
- decimal
- 3. 二进制类型
- char类型
- varchar类型
- 4. 日期时间
- 日期时间类型
- 5. string 类型
- enum类型和set类型
- enum类型和set类型的查找
- 在枚举中的查找
- 在set中的查找
1. 整体概要
看起来分为很多类型,例如数值类型,有一些看一眼就懂啦,所以不会全部介绍
2. 数值类型
(有符号) tinyint 创建表
进入 test_db数据库中,并创建表t1 ,其内部包含 tinyint类型的num
输入 desc t1; 查看t1表结构
tinyint类型为一个字节,有符号,所以取值范围为 -128 到 127
向t1 表中分别插入 -128 、128 、1
输入 select * from t1; 查询 t1 表的结构
由于 -129 和128 超过了 tinyint类型的取值范围,所以插入失败
(无符号) tinyint 创建表
再次创建表,内部包含一个无符号的 tinyint类型的num
所以取值范围为 0 到255
输入 desc t2; 查询t2表的结构
由于取值范围是 0 到255
所以向t2表插入 0 100 255 ,可以插入成功
而向t2表插入 -1,则会插入失败
bit类型
bit[M] :位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
先进入 test_db 数据库中,创建一张 t3表
内部包含 int类型的id 、 1字节的online
id 表示 用户某一个身份id
online 表示 当前用户是否登录 (1表示登录 0表示没有登录)
插入 (123 ,0 ) 表示123号用户不在线
插入 (124 ,1 ) 表示 124号用户在线
可当插入 (123,5)时 ,由于 online 的类型为1个比特位,所以只能插入0或者1,所以会报错
输入 select * from t3; 即查看t3表的结构
发现online 对应的位置 什么都看不到
是因为通常以ASCII值形式显示的,而ASCII值在当前是不可显示的
让 online 以十进制方案显示出来
这样就可以看到 0 或者 1
创建表时,bit范围是1到64,而当前设置是65,所以创建表不成功 会报错
float 类型
float [ (m,d) ] [unsigned] : m指定显示长度(数字位数的总个数) d指定小数位数 占用空间4个字节
创建一张表t5,包含 int类型的id 以及 float类型的salary,并且salary共有4位,其中2位是小数
id 表示 这个人的身份
salary 表示 这个人的工资
float [ (4,2) ] 的取值范围是 -99.99 和 99.99
向t5表插入 (1,99.99) 和(1,-99.99) ,是可以插入成功的
(float的取值范围是有符号区分的)
若slary为23.46,则插入成功,并且显示为23.46
若slary为23.467,则插入成功,并且显示为23.47 ,因为四舍五入,将其进位
若slary为23.464,则插入成功,并且显示为23.46,因为四舍五入,将其舍去
所以进行浮点数存储时,若要求是2位精度,而传入更多位的精度,mysql就会采用 四舍五入的方式 将数据进行存储
(无符号)float
mysql支持定义符号的浮点数
float [ (4,2) ] 的取值范围为 0 到 99.99
创建一张表t6,内部包含 一个bigint类型的id 以及 无符号的浮点数类型的salary,并且salary共有4位,其中2位是小数
若插入 一个99.999,正常来说小数末尾是9 是要四舍五入的,但是进位 就会超过99.99的取值范围 ,所以会报错
decimal
decimal (m,d) [unsigned] : 定点数m指定长度 ,d表示小数点的位数
decimal(5,2) 的取值范围是 -999.99 - 999.99
decimal(5,2)unsigned的取值范围是 0 - 999.99
decimal和float很像,但是有区别:
float 和 decimal 表示的精度不一样
创建一张表 t7 ,内部包含 float类型的f1,f1总长度为10 ,其中小数部分为8
以及decimal 类型的f2,f2总长度为4,其中小数部分为2
当插入 99.99 在decimal的取值范围内时,则插入成功
当插入99.999不在decimal的取值范围内时,则插入失败
将属于t7表的 decimal类型的f2 的精度 改为 总长度为10 ,其中小数部分为8
在t7表中的成员 f1和f2中分别插入 23.12345612
输入 select *from t7; 查看t7表的信息 发现 f1是精度方面的问题
float在精度过大时,会进行优化策略
但decimal不会这样,decimal可以完全保证数据的精度
3. 二进制类型
char类型
char(L) : 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值为255
在test_db数据库中,创建一张表t8 ,内部包含 int类型的id 以及 char类型的name
输入 desc t8; 查看t8表中更详细信息
t8表中的name 最多储存2个字符
向t8表中插入 一个字符’a’ 或者插入两个字符’ab’ 时,就可以插入成功
向t8表中插入三个字符’abc’时,就会报错
MySQL中的字符代表一种符号,一个汉字代表一个字符
当插入1个字符 中 和2个字符 中国 时,是可以插入成功的
但当插入 3个字符 中国人时 ,因为最多储存2个字符,所以会报错
varchar类型
varchar(L) :可变长度字符串,L表示字符串长度,最大长度为65535个字节
创建一张表t9,内部包含int类型的id 和 varchar类型的name,最多储存6个字符
并默认字符集为uft8
每一个汉字都可以看做是一个字符
若输入 1个字符 中, 3个字符中国人 都可以插入成功
若输入 7个字符时,就会报错
想要修改 t9表中的name成员的varchar类型 最多储存65536个字符
但是报错显示 最多 为21845 个字符 ,可明明varchar 最大长度为65535个字节
MysQL在存储varchar类型时,是按照utf8编码的
在uft8编码中,一个英文字符等于1个字节,一个中文等于3个字节
假设以中文计算,21845个字符 乘以3 就为 65535 个字节
char为固定长度字符串,类似于c++中的数组
如:char(6) 就表示数组字符个数为6个字符,可能只用了1个字符空间,但是依旧会给6个字符空间
varchar为变长字符串
varchar(len) len定义多大就表示字符空间的上限
如:varchar(6) 可能只用了1个字符空间,就只会分配保存一个字符空间
varchar的字节长度在0 -65535之间 ,需要有1-3个字节用于记录数据的大小
(传入数据的大小不同,有可能数据小 1个字节就能记录,有可能数据太大,就需要3个字节才能记录)
假设有3个字节记录数据,所以有效字节数为65532
当表的编码为utf8时,varchar(len) 的参数 len最大值为 65532/3=218844
(一个字符占用3个字节为例)
所以最大字符个数为 21844
创建一张表t10,内部包含 varchar类型的name ,其最多储存21845个字符
因为超过了21844范围,所以会报错
当表中 name的varchar类型的取值为21844时,就可以创建成功
4. 日期时间
日期时间类型
常用的日期如下:
date:日期 ‘yyy-mm-dd’ (年月日),占用三个字节
datetime: 时间日期格式 ‘yyyy-mm-dd HH: ii:ss’ (年 日 时 分 秒) 表示范围从1000到9999,占用八个字节
timestamp:时间戳 ,从1970年开始的 yyy-mm-dd HH:ii:ss (年 月 日 时 分 秒) 格式和 datetime 完全一致,占用四个字节
创建一张表 t10 ,内部包含 date类型的t1 ,datetime类型的t2,timestamp类型的 t3
输入 desc t10; 查看t10表的更多详细信息
t3的类型为时间戳,默认值为 CURRENT_TIMESTAMP
扩展说明:创建表结构时,向表中插入数据,timestamp会自动更新
而date与datetime 需要外部插入
向t10表中的成员 date类型的t1 和 datetime类型的t2 分别插入 2001-10-02 和2002-10-03 08:00:00
输入 select * from t10; 查看t10表的更详细的信息
发现t3自动更新为当前时间
当输入 update t10 set t1=‘2003-10-04’; 更新t10表中t1的时间
发现t3所表示的时间戳 也会跟着变化
5. string 类型
enum类型和set类型
enum:枚举
enum(‘选项1’,‘选项2’,‘选项3’);
提供若干个选项的值,最终一个单元格中,实际只存储其中一个值
如:问卷调查 性别 只能选男或者女
set :集合
set(‘选项1’,‘选项2’,‘选项3’);
提供若干个选项的值,最终一个单元格中,可存储任意多个值
如:问卷调查 爱好 可以选打羽毛球 乒乓球 篮球等
创建一张表 votes,其中包含 最多存储30字节的名字 、 性别 、 爱好
同时 性别 只能从男或者女中 选择一个
而爱好 可以从 代码 篮球 游泳中 选择一个或者多个
向votes表中插入 姓名为 张三 性别为 男 爱 好为代码
当性别中 插入 0 和3 是不可以的,可插入 1 和 2 是可以的
输入 select * from votes 时,发现 1对应性别男 2对应性别女
所以使用枚举类型,可以使用对应的枚举常量
也可以使用枚举常量对应的下标 (从1开始 分别代表第一个枚举值 依次往后推)
向votes表中插入 姓名 为赵六 、性别为男、 爱好为 代码、篮球、游泳
(不允许插入不存在的爱好,同时也可以选择插入一个爱好或者多个爱好)
enum类型 与 set类型 允许为空
只插入 名字,性别与爱好会显示为NULL
NULL表示什么都没有
’ ’ 表示有东西,但是 为空串
若set类型 对应的爱好 插入 0 ,则显示为空串
若set类型 对应的爱好 插入 1 ,则显示为第一个设置的值 ,依次类推
若set类型 对应的爱好 插入 2,则显示为第二个设置的值
若set类型 对应的爱好 插入 3 ,则显示为第一个设置的值 和第二个设置的值
因为共有3个爱好,所以设置3个比特位 000
从右到左,依次为从低到高
若表示代码,则为 001
若表示篮球,则为 010
若表示代码和篮球,则为011
若表示游泳,则为 100
enum类型和set类型的查找
在枚举中的查找
输入 select * from votes where gender=‘男’;
挑选出votes表中所有男生的信息
输入 select * from votes where gender=‘女’;
挑选出votes表中所有女生的信息
在set中的查找
输入 select * from votes where hobby=‘游泳’;
挑选出votes表中爱好只有游泳的人
有的人爱好是广泛的,其中就包含游泳,但是筛选并不显示
所以需要借助 mysql的筛选函数 —— find_in_set 函数
find_in_set(sub,str,str_list):如果sub在str_list中,则返回下标,如果不在,返回0;
str_list 用逗号分隔的字符串
输入 select * frin votes where find_in_set(‘游泳’,hobby);
在votes表 的 hobby 查找所有爱好有游泳 的人
and相当于 C语言的逻辑与
在votes表 的 hobby 查找所有爱好有游泳 以及 爱好有篮球的人
相关文章:
【MySQL】数据库数据类型
文章目录 1. 整体概要2. 数值类型(有符号) tinyint 创建表(无符号) tinyint 创建表bit类型float 类型(无符号)floatdecimal 3. 二进制类型char类型varchar类型 4. 日期时间日期时间类型 5. string 类型enum类型和set类型enum类型和set类型的查找在枚举中的查找在set中的查找 1.…...
计算机组成原理 new07 真值和机器数 无符号整数 定点整数 定点小数 $\color{red}{Δ}$
文章目录 真值和机器数 无符号整数无符号整数的定义无符号整数的特征无符号整数的表示范围无符号整数的加法无符号数的减法 有符号整数(定点整数)有符号整数的定义原码原码的特点反码反码的特点补码补码的特点快速求解n位负数补码的方法为什么补码能够多表示一个范围(重点)变形…...
基于SSM的文化培训学校网站的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
gitee-git使用
克隆gitee某代码仓库某分支流程 1.克隆远程gitee仓库某分支到本地 2.如果克隆gitee仓库是私有的系统会弹出弹框让你输入gitee的账户和密码 3.克隆远程分支完成 git所需命令 克隆远程仓库到本地 git clone 仓库URLgit克隆远程分支到本地 git clone -b 分支名 仓库URLgit 拉…...
欧拉图(Euler Graph)
这种「一笔画」问题与欧拉图或者半欧拉图有着紧密的联系,下面给出定义: 通过图中所有边恰好一次且行遍所有顶点的通路称为 欧拉通路; 通过图中所有边恰好一次且行遍所有顶点的回路称为 欧拉回路; 具有欧拉回路的无向图称为 欧拉图; 具有欧拉通路但不具有欧拉回路的无向图…...
【安全体系架构】——零信任网络架构
什么是零信任网络架构? 零信任网络架构是一种网络和信息安全模型,它将传统的信任模型颠覆,不再信任内部或外部用户、设备或网络。相反,它将每个访问请求都视为不受信任,要求对每个用户、设备和流量都进行认证和授权&a…...
mybatis动态sql一对多查询
在数据库设计中,一对多关系是非常多的,例如消息通知和附件,一个消息通知中往往会包含多个附件,这种情况下使用mybatis动态sql可以很方便的查询出来。 1、数据库设计 消息表:sys_message CREATE TABLE sys_message (i…...
Leetcode.2316 统计无向图中无法互相到达点对数
题目链接 Leetcode.2316 统计无向图中无法互相到达点对数 rating : 1604 题目描述 给你一个整数 n n n ,表示一张 无向图 中有 n n n 个节点,编号为 0 0 0 到 n − 1 n - 1 n−1 。同时给你一个二维整数数组 e d g e s edges edges ,其…...
介绍机器学习中CatBoost工具的详细使用指南
在机器学习的动态世界中,Python 是创新背后的驱动力,专业人士必须使用正确的工具。CatBoost 就是这样一个工具,以其卓越的速度和准确性悄然改变了该领域。在本指南中,我们将深入研究 Python 3 中的 CatBoost,涵盖基础知识、高级技术和实际示例,包括使用示例数据集和绘图进…...
操作系统【OS】线程与进程的比较
进程 线程 是什么的单位? 是资源分配的基本单位 是调度的基本单位 不能共享什么? 不能共享虚拟地址空间 不能共享栈指针 可以共享什么? 拥有一个完整的资源平台 每个进程都有独立的地址空间和资源 除了共享全局变量,不允许其他进程访问 某进程中的线程…...
在Mac上使用安卓桌面模式
在安装Homeblew的基础上 替换国内源 export HOMEBREW_API_DOMAIN"https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" export HOMEBREW_BREW_GIT_REMOTE"https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" brew update 安装Scrcpy …...
YOLO目标检测——人脸口罩佩戴数据集【(含对应voc、coco和yolo三种格式标签】
实际项目应用:公共场所监控场景下的大密度人群检测是否佩戴口罩,以及戴口罩的人证比对(安检刷脸不用摘口罩)、手机解锁、刷脸考勤等身份认证场景。数据集说明:人脸口罩佩戴检测数据集,真实场景的高质量图片…...
mongodb如何多表查询,如同时查询店铺以及里面对应的商品
多表查询场景介绍 一种很常见的场景,比如电商首页中,需要同时展示最近比较火热的店铺,以及直接展示店铺里对应的商品。或者用户下单之后购物车里可以看到所选的商品以及对应的店铺。如果不知道如何用mongodb自带的查询语句快速查询的话&#…...
Linux环境修改服务器时间和网络时间保持一致
目录 介绍UTC和CST 修改时区 修改时间 介绍UTC和CST UTC是协调世界时,是全球统一的时间标准。UTC的时间是基于原子钟计算的,以秒为单位,不受夏令时等影响。世界各地都可以通过UTC来同步时间。 CST是中央标准时间,相当于UTC-6…...
CUDA学习笔记6——事件计时
事件计时 CUDA事件是直接在GPU上实现的,因此它们不适用于对同时包含设备代码和主机代码的混合代码计时。 cudaEventCreate 创建一个事件cudaEventRecord 记录一个事件cudaEventElapsedTime 计算两个事件之间经历的时间,第一个参数为某个浮点变量的地址…...
使用vscode调试ffmpeg源码
ffmpeg的编译配置 # --enable-debug 设置为调试级别 # --disable-stripping 如果不加此选项,会strip去掉符号信息 ./configure --prefix{output_path} --enable-debug --disable-stripping make -j10VSCode的配置 将以下文件对比替换工程.vscode目录下的相同文件 …...
微信小程序--数字化会议OA系统之首页搭建
一、Flex弹性布局 布局的传统解决方案,基于盒状模型,依赖 display属性 position属性 float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C提出了一种新的方案—-Flex布局,可…...
代码随想录算法训练营第六十天 | 739. 每日温度、496.下一个更大元素 I
739. 每日温度 链接: 代码随想录 (1)代码 496.下一个更大元素 I 链接: 代码随想录 (1)代码...
WebView 以及如何测试
混合应用 顾名思义,它们是本机应用程序和 Web 应用程序的混合体。它们可以在应用程序商店中下载,并且需要像本机应用程序一样从设备进行访问身份验证,但它们也有一个嵌入在应用程序中的浏览器(WebView)用于呈现 HTML。…...
Jetpack:013-Jetpack底部导航栏
文章目录 1. 概念介绍2. 使用方法2.1 NavigationBar2.2 NavigationBarItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中弹出菜单相关的内容,本章回中将介绍 底部导航栏。闲话休提,让我们一起Talk …...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
