当前位置: 首页 > news >正文

《MySQL数据类型》

文章目录

  • 一、理解数据本身就是一种约束
    • 1.tinyint类型和 tinyint unsigned类型
    • 2.其他的int类型
  • 二、bit类型
  • 三、float类型
    • 1.signed版本
    • 注意
    • 2.unsigned版本
  • 四、decimal类型
  • float 和 decimal 总结
  • 五、char类型(固定长度)
  • 六、varchar类型(可变长度)
    • 总结
  • char和varchar比较
  • 七、日期和时间类型
  • 八、enum和set类型
    • enum
    • set
    • 总结
    • enum和set的类型查找


一、理解数据本身就是一种约束

1.tinyint类型和 tinyint unsigned类型

在这里插入图片描述
先创建表t1

create table if not exises t1(
num tinyint
);
表中只有一个字段tinyint
在这里插入图片描述

向num字段中添加数据:

insert into t1 values(-1);

在这里插入图片描述

然而,当我们插入256时:

在这里插入图片描述
出现了错误
意味着数据库不允许我们插入不合法数据。
反之,插入的一定是合法的数据!!!

所以一般而言,数据本身就是一种约束!!!

约束程序员,尽可能正确地插入数据。
就算你不是一个很好的程序员,Mysql也能保证数据的合法性。

2.其他的int类型

在这里插入图片描述

二、bit类型

创建一个表时,如下:
在这里插入图片描述
向表中插入一些数据后,如下:

在这里插入图片描述
问题是:为什么online字段没有任何显示呢?

只需执行如下命令就能显示了:

select id , hex(online) from t1;
(以十进制的方式显示)

在这里插入图片描述

同时也可以修改online字段的大小:

alter table t1 modify online bit(10);
在这里插入图片描述

三、float类型

1.signed版本

在这里插入图片描述
比如salary float(4,2);

表示允许承装的最多位数是4位(总长度,包含整数部分和小数部分),小数点后最多占两位。

那插入的salary(工资)最大就是:99.99

由于在建表时,salary类型没有设置成unsigned类型,所以可以插入负数,但实际生活中没有负数的工资吧。。。

注意

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

比如要插入一个数:

insert into t2(id ,salary) values(1,99,991);

是会插入成功的,因为在小数点部分,会进行四舍五入,将1舍去。
但是当插入下面的数据时,就不行:

insert into t2(id, slary) values(2,99.996);

因为一旦最后一个小数位进位后,数据就超出了-99.99~99.99的范围。

2.unsigned版本

如果把float设置成unsigned版本,那么取值范围就相当于把负数部分直接丢掉。

比如:定义一个表时,把float设置成float(4,2) unsigned

那取值范围就是:0~99.99

总结:1.一般情况下,默认的float,不指定位数的情况下,可容纳数据位数是比较大的,跟不同的平台设计也有关。
2.有一些情况,存储的浮点数类型比较大时,会出现精度丢失的问题。
在这里插入图片描述

四、decimal类型

该decimal类型,与float类型基本一样,区别在于decimal能更精确控制浮点数,确保不会丢失。

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

float 和 decimal 总结

说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。
建议:如果希望小数的精度高,推荐使用decimal。

五、char类型(固定长度)

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

比如:name char(2),表示放的最大长度的字符串是2;

注意:在MySQL中,一个汉字表示一个字符!
在这里插入图片描述

六、varchar类型(可变长度)

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

在修改varchar的最大类型的长度时,发现最大字符长度是 21845,
这个是字符的长度,由于采用utf8编码,一个字符3个字节。

21845*3 = 65535

在这里插入图片描述

总结

但是,当我修改到21845时,同样不可以。

原因是:varchar(6),表示的是字符的使用上限是6,而不是一次固定分配6个字符大小的空间。

当只使用1个字符的空间时,varchar实际上只会分配一个字符大小的空间。所以,就需要有1~3个字节位,来记录所使用的空间有多少。
而char类型不同,char类型是直接一次给指定的空间,不管用没用完,都给那么多。

说明:

  • 关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:
  • varchar字节长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

char和varchar比较

在这里插入图片描述

在这里插入图片描述

七、日期和时间类型

常用的日期有如下三个: date :日期 ‘yyyy-mm-dd’ ,占用三字节 datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss ,格式和 datetime 完全一致,占用四字节

创建一个表,如下:

create table if not exists t7(
-> d date,
-> dt datetime,
-> ts timestamp
-> );

首先插入一个数据:
在这里插入图片描述
时间戳timestamp就是当前的最新时间。

然后,修改d,如下:
在这里插入图片描述
发现时间戳ts改变了,变成了最新的时间。

时间戳(timestamp)存在的意义:
实际生活中的社交软件,视频下面会有评论,当一个人发表评论时,会被所有人看到,并且附带发表评论时的时间。

过了几个月,当这个人修改它发表过的评论时,时间会自动更新成当前时间!
这就能让所有人知道,该评论何时被评论的,何时被修改的。

datetime存在的意义:
入职的时间,固定在那里,或者办理身份证的时间,固定在那个时间,什么日期,几时几分几秒,一般不会自动更新。

date存在的意义:
比如记录一个重要的人的生日,比如你自己的生日。

八、enum和set类型

enum

enum类型:枚举
在插入时,可以直接插入枚举类型定义的常量,也可以直接插入枚举常量的下标。(这里的下标从1开始)

比如:创建一个表如下:

create table if not exists t8(
-> name varchar(30),
-> gender enum(‘男’,‘女’),
-> hobby set(‘代码’,‘羽毛球’,‘乒乓球’,‘足球’,‘游泳’)
-> );

可以这样插入:

  • insert into t8 values(‘张飞’,‘男’,‘代码’);

还可以这样插入:

  • insert into t8 values(‘孙权’,1,‘代码’);

结果如下:1就代表枚举常量中的下标,在此1表示男,2表示女。
在这里插入图片描述

set

set的选择可以按照位图来。

以上面的表为例,

hobby set(‘代码’,‘羽毛球’,‘乒乓球’,‘足球’,‘游泳’)

一共有五个爱好,那么位图就有5个比特位,为1时表示选择该爱好。

所以可以这样插入数据:

  • insert into t8 values(‘孙权’,1,31);
    31的二进制就是:11111,就会让上面set位图的5个比特位全部置1。
    如果是这样插入:
    insert into t8 values(‘孙权’,1,7);
    7的二进制是:00111,代表将前3个比特位置1。
    而前三位就是set的从左到右开始计算的。
    所以爱好为:‘代码’,‘羽毛球’,‘乒乓球’。

总结

enum用数字来插入时,指代下标。
set用数字来插入时,指代位图,set的从左到右代表从小到大。

enum和set的类型查找

法1:

select * from votes where gender=1;
select * from votes where gender=‘男’;
上面两种写法等价。

根据特定的类型查找,比如按性别查找。

法2:
find_in_set 函数

select find_in_set(‘a’,‘a,b,c’);

  • 1.find_in_set 函数是查找一个元素是否在集合里面。
  • 2.判断一个元素是否在集合中,而不是判断是否严格相等。

所以,查找hobby是否有羽毛球时,是判断羽毛球是否在每一个用户中的。
在这里插入图片描述

相关文章:

《MySQL数据类型》

文章目录 一、理解数据本身就是一种约束1.tinyint类型和 tinyint unsigned类型2.其他的int类型 二、bit类型三、float类型1.signed版本注意2.unsigned版本 四、decimal类型float 和 decimal 总结五、char类型(固定长度)六、varchar类型(可变长…...

解决windows中的WSL Ubuntu子系统忘记root密码和用户密码问题

1、以管理员身份运行PowerShell 2、在powershell中执行wsl.exe --user root wsl.exe --user root如果出现了上面的报错,则需要运行步骤3、4,然后在执行步骤5改密码,如果没有出错,请直接跳到第5步改密码操作!&#xff…...

数据分析——业务指标分析

业务指标分析 前言一、业务指标分析的定义二、业务问题构建问题构建的要求 三、业务问题的识别在识别问题的阶段对于企业内部收益者的补充 四、竞争者分析竞争者分析的内容竞争者分析目的案例 五、市场机会识别好的市场机会必须满足的条件市场机会案例 六、风险控制数据分析师常…...

给c++小白的教程9:循环

老师给比纳瑞出了一道题。 给出 𝑛 和 𝑛 个整数 𝑎𝑖,求这 𝑛 个整数中最小值是什么。 由题意得,此题无论是顺序结构或是选择结构都连输入也解决不了。 这时候,我们就要用上循环…...

SLAIM:一个实时的RGB-D NeRF-SLAM系统

SLAIM:一个实时的RGB-D NeRF-SLAM系统与现有的NeRF-SLAM系统相比,我们的方法在跟踪性能上始终表现出更强的竞争力。我们的方法采用体积密度表示,并引入了一种新的KL正则化器在射线终止分布上,将场景几何限制为空隙空间和不透明表面…...

PWN入门之Stack Overflow

Stack Overflow是一种程序的运行时(runtime)错误,中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数,导致与其相邻的栈中的变量值被改变。 在本篇文章中&#xff…...

QT:label标签/进度条的使用

文章目录 设置不同格式的文本显示图片文本对齐/自动换行/缩进/边距LCDNumber倒计时 ProgressBar进度条 设置不同格式的文本 在文本格式中,存在富文本,makedown格式的文本,还有纯文本,下面就依据这三个进行举例 #include "w…...

网络初始化配置

IPADDR192.168.23.10 #新的ip地址,ip的网段要与nat模式下的网段一致 NETMASK255.255.255.0 #子网掩码 GATEWAY192.168.23.2 #网关 DNS1114.114.114.114 #域名解析:配置为国内114.114.114.114,国外8.8.8.8 ONBOOTtrue 启动时该网卡…...

在Ubuntu上搭建并通过systemctl管理Minecraft Java版服务器

本教程将详细介绍如何在Ubuntu操作系统上搭建一个Minecraft Java版服务器,并使用systemctl服务来管理服务器的启动、停止和重启。同时,我们还将探讨如何通过NGINX设置TCP/UDP转发,使得玩家能够通过域名方便地连接到你的Minecraft服务器。 准…...

【C++PCL】点云处理ESF描述符

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的…...

鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境

文章目录 系列文章硬件与软件需求DevEco Studio扩展工具与框架开发资源系列文章 鸿蒙应用开发系列 篇一:鸿蒙系统概述 鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环境 (系列计划预告) 鸿蒙系统UI/UX设计 鸿蒙系统应用开发基础 鸿蒙系统高级开发技术 鸿蒙系统特色功能开发 …...

“A”分心得:我的云计算HCIE学习之路

大家好,我是誉天云计算HCIE周末班梁同学,在誉天老师和同学们的帮助下,我终于在4月24日顺利通过了云计算3.0 HCIE的认证考试,而且获得了A,这是让我特别惊喜的,功夫不负有心人。 我日常的工作是网络运维&…...

现代信号处理8_递归的最小二乘(CSDN_20240505)

递归的最小二乘大约出现在50年前。递归,就是在已经算出的结果的基础下,当新的数据到来时,不需要再对数据进行一次完整的运算,而是在已有结果的基础上做一些简单的调整,就能得到新的结果。使用递归的好处: …...

2024年全国保密宣传教育月的主题是()。A.贯彻落实保密法。你我都是护密人B.国家利益高于一切,保密责任重于泰山C.筑牢保密防线,维护国家安全

2024年全国保密宣传教育月的主题是()。点击查看答案 A.贯彻落实保密法。你我都是护密人B.国家利益高于一切,保密责任重于泰山 C.筑牢保密防线,维护国家安全D.共筑保密防线,公民人人有责 坚持不懈开展保密宣传教育,是保密工作实…...

一个通过照片识别地理位置的应用

一个通过照片识别地理位置的应用 引言 最近发现一个能根据照片进行地理位置判定的应用,在全球范围内能够非常准确地进行空间位置识别。我分3个尺度进行了测试,分别是城市街景(来源google和腾讯街景)、野外街景和我自己拍摄的照片…...

wordpress外贸独立站建站10要10不要

创建一个成功的WordPress外贸独立站需要注意很多因素。以下是zhanyes根据多年建站经验总结的wordpress外贸独立站建站的10个建议和10个避免的事项,以帮助您建立一个高质量的外贸网站: 10个要: 1. 要选择合适的域名:确保您的域名…...

搬运5款小众,无广告,实用性拉满的软件

​ 你是否喜欢一些小众且无广告的软件?如果是的话,我这边有一些给你推荐的。 1.屏幕录制——OBS Studio ​ OBS Studio是一款广泛使用的实时流媒体和屏幕录制软件,适用于Windows、MacOS、Linux平台。它采用C、C和Qt编写,提供高质…...

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传,滑动窗口,流量控制,拥塞控制 TCP重传机制: 超时重传快速重传SACKD-SACK 通过序列号与确认应答判断是否要重传 超时重传: 超过指定时间没有收到确认应答报文,就会重发该数据 触发超时重传的情况…...

云手机对出海企业有什么帮助?

近些年,越来越多的企业开始向海外拓展,意图发掘更广阔的市场。在这过程中,云手机作为一个新型工具为很多企业提供了助力,尤其在解决海外市场拓展过程中的诸多挑战方面发挥着作用。 首先,云手机的出现解决了企业在海外拓…...

Android Studio实现简单的自定义钟表

项目目录 一、项目概述二、开发环境三、详细设计3.1、尺寸设置3.2、绘制表盘和指针3.3、动态效果 四、运行演示五、总结展望六、源码获取 一、项目概述 在安卓开发中,当系统自带的View已经无法满足项目需求时,就要自定义View。在Android中是没有与钟表有…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...