3.MySQL数据类型详解

news2024/11/24 1:08:32

个人主页:Lei宝啊 

愿所有美好如期而遇


目录

1.数据类型分类

2.数值类型

(1).tinyint,smallint类型等

(2)bit类型

(3)小数类型

1).float

2).decimal

3.字符串类型

(1)char

(2)varchar

(3)char和varchar比较

(4)日期和时间类型

(5)enum和set

综合举个栗子


 

1.数据类型分类

数值类型:bit 

                  tinyint  smalliint  int  bigint  

                  float  double  decimal 

                  bool

文本,二进制类型:

                  char

                  varchar

                  text

时间日期:date  datetime  timestamp

String类型:

                  enum

                  set

2.数值类型

(1).tinyint,smallint类型等

事实证明,mysql不允许不合法的数据插入,-129和128超出了tinyint的范围。

接下来我们测试一下无符号tinyint的范围。

 显然,变成了0~255.

(2)bit类型

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1

我们发现竟然什么都没有,为什么呢?

bit字段在显示时,是按照ASCII码对应的值显示

先将num的范围改大点

(3)小数类型

1).float

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节

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

我们先不指定宽度和小数位数。

可以看出默认6位小数,再多就会丢失精度。

接下来指定一下宽度和精度。

99.9954进位后就是100.00,超出宽度,数据不合法,数据库不允许插入,精度一定会保持两位,哪怕是补两个0.

这样也可以。 

接下来看一下无符号float

于是我们知道了,float(4,2) unsigned 类型的数据范围只有0~99.99

2).decimal

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

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

decimal的精度很高,基本上插入几就是几,float丢失精度就比较多了。

3.字符串类型

(1)char

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

注意:utf8中一个字符占3个字节,而gbk中一个字符占2个字节 

这里的一个字符可以是数字,字母,符号和汉字,都是一个字符。

(2)varchar

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

 

关于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字节)。

(3)char和varchar比较

如何选择定长或变长字符串?

如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
定长的意义是,直接开辟好对应的空间
变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

(4)日期和时间类型

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

先插入一个date类型的数据。

emmm?我们没插入datastamp类型的数据啊,为什么呢?这是因为他有default值,也就是默认值,当我们不插入时,默认插入现在的时间。而且就算你刻意插入NULL,插不进去,因为他不允许为空。

 

而且时间戳会自动更新当前时间。

(5)enum和set

enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);

不可插入多个选项。

set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...); 

再插入几个数据。

将set里的选项当做比特位,a就是1,a,b就是11,a,b,c就是111,转换为十进制就是1,3,7

再来看一个。

这样也是可以的。

但是我们也想找包含‘a’的所有项,怎么找?

集合查询使用find_ in_ set函数:
find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0

首先select可以执行表达式和函数。

非0为true,而且我们看到这个函数只能查找单个字符。

这样我们就筛选出了所有爱好为a的人。

那么如何筛选爱好为a,b的人呢?

用and连接就好了。

综合举个栗子

先建个新表。

不可以这样查找。

这样查可以,但是不能够包含。

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

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

相关文章

Vue3<script setup>语法糖下,实现父子组件通信以及数据监听。

在Vue3的script setup语法糖中,没有办法通过Vue2的ref、props、parent、中央时间总线等等众多方法,通过this指针简单的实现父子组件的通信,网络上也很少有关于script setup语法糖的相关教程,所以决定自己写一个详细教程&#xff0…

创建IDEA模板

将常用的配置文件内容、模板框架等放到IDEA的模板中保存,方便以后使用。以mybatis-config.xml和一个映射文件为例(这是我自己学习SSM时用到的,后面学习SpringBoot时发现配置都只需要写到application.yml中就ok了,配置变得非常简单…

07_03文件系统怎么玩的

文件系统 Linux将文件系统分为了两层:VFS(虚拟文件系统)、具体文件系统,如下图所示: VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层&#…

【计算机网络】IP协议详解

文章目录 一、引入 二、简单认识IP协议 2、1 IP协议基本概念 2、2 IP协议报文格式 2、3 分片与组装 2、3、1 MTU 与 MSS 2、4 网段划分 2、4、1 简单理解路由 2、4、2 IP地址 2、4、3 IP地址的划分 2、4、4 CIDR(无类别域间路由) 2、4、5 特殊的IP地址 …

磁盘非跨盘访问算法实现

1. 背景说明 本算法基于已将磁盘分布合并并排序为升序线性表。实现示例为:磁盘扇区大小:32(可自定义),待拆分磁盘内存: [0 - 50],[60 - 100](可增加)。示意图如下&#x…

【电机控制】FOC电机控制

FOC(Field-Oriented Control,磁场定向控制)是一种电机控制策略,又称矢量控制,是通过控制变频器输出电压的幅值和频率控制三相直流无刷电机的一种变频驱动控制方法。 FOC 的实质是运用坐标变换将三相静止坐标系下的电机…

什么是 CSRF 、原理及其解决方式

什么是 CSRF ? 跨站请求伪造(CSRF,Cross-site request forgery),也称为 XSRF,Sea Surf 或Session Riding,是一个攻击向量,它欺骗 Web 浏览器在登录用户的应用程序中执行不需要的动作…

如何处理前端国际化和本地化?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

“比特币市场风起云涌:第三季度报告揭示表现和未来趋势“

要点: 比特币的季度价格表现较差,为 -11.5%,但今年迄今为止的表现仍优于大多数资产类别; 截至撰写本文时,上半年推动比特币上涨的美国购买力已完全减弱; 交易量、流动性、波动性和搜索趋势均继续…

idea安装汉化插件

settings plugins 插件搜索chinese 重启 成功

第五十五章 学习常用技能 - 删除存储的数据

文章目录 第五十五章 学习常用技能 - 删除存储的数据删除存储的数据重置存储Storage浏览表格 第五十五章 学习常用技能 - 删除存储的数据 删除存储的数据 在开发过程中,可能需要删除某个类的所有现有测试数据,然后重新生成它(例如&#xff…

基于SSM的校园音乐平台系统

基于SSM的校园音乐平台系统~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 登录界面 管理员界面 歌手管理 歌曲管理 摘要 校园音乐平台系统(Campus Mu…

三、RocketMQ的JAVAAPI的基础概念

消息(Message) 生产者和消费者数据流转的基础数据模型,主要属性有 字段名默认值必要性说明Topicnull必填消息所属topic的名称Bodynull必填消息体Tagsnull选填消息标签,方便服务器过滤使用。目前只支持每个消息设置一个Keysnull选填代表这条消息的业务关…

飞花令游戏(Python)

飞花令是古时候人们经常玩一种“行酒令”的游戏,是中国古代酒令之一,属雅令。“飞花”一词则出自唐代诗人韩翃《寒食》中 春城无处不飞花 一句。行飞花令时选用诗和词,也可用曲,但选择的句子一般不超过7个字。 在《中国诗词大会》…

四、RocketMQ发送普通消息、批量消息和延迟消息

Producer发送普通消息的方式 1.同步发送消息 同步消息代表发送端发送消息到broker之后,等待消息发送结果后,再次发送消息 实现步骤 创建生产端,声明在哪个生产组注册NameServer地址构建Message实体,指定topic、tag、body启动…

论文阅读之《Learn to see in the dark》

Learning to See in the Dark-CVPR2018 Chen ChenUIUC(伊利诺伊大学厄巴纳-香槟分校) Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院) 文章链接:https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.p…

使用hugging face开源库accelerate进行多GPU训练(单机多卡)时,在保存模型结构的时候出现的问题

目录 问题描述问题分析问题解决 问题描述 我在保存模型结构的时候,先获取模型参数,然后再保存,代码如下: 图示代码是在训练主循环中的: 这种情况下会出现报错: nboundLocalError: UnboundLocalErrorloc…

计算机毕业设计选什么题目好?springboot 医院门诊在线预约挂号系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

《C++ Primer》练习9.52:使用栈实现四则运算

栈可以用来使用四则运算,是一个稍微有点复杂的题目,去学习了一下用栈实现四则运算的原理,用C实现了一下。首先要把常见的中缀表达式改成后缀表达式,然后通过后缀表达式计算,具体的原理可以参考这位博主的文章&#xff…