MySQL 数据类型

数值类型

int类型

类型说明
tinyint1字节,范围从-128到127(有符号),0到255(无符号)
smallint2字节,范围从-2^15到2^15-1(有符号),0到2^16-1(无符号)
mediumint3字节,范围从-2^23到2^23-1(有符号),0到2^24-1(无符号)
int4字节,范围从-2^31到2^31-1(有符号),0到2^32-1(无符号)
bigint8字节,范围从-2^63到2^63-1(有符号),0到2^64-1(无符号)

例如我们创建表 t2,其内有类型为 tinyint 的 n1 字段和类型为 tinyint unsigned 的 n2 字段可以插入一系列各自范围内数据,如果插入的数据超过范围就会报错不让插入。

bit类型

类型说明
bit(M)
位字段类型, M表示比特位的数目 ,范围从1 64 。如果 M 被忽略,默认为 1

例如,我们创建表 t3,其内有类型为 int 的 id 字段和类型为 bit(1) 的 gender 字段,其中bit(1)表示了gender字段只占用一个比特位,所以范围为0到1,当我们插入超过此范围的数字时就会报错,我们也可以看到在表中 bit 类型显示时以十六进制的形式显示。

我们可以更改gender为bit(10),这样以后gender的范围变为0到2^10-1。

小数类型

类型大小
float(m,d)4字节,单精度浮点数。m指定浮点数的总长度,d指定小数位数。用于存储大约7位有效数字的浮点数。
double(m,d)8字节,双精度浮点数。用于存储大约15位有效数字的浮点数。
decimal(m,d)根据指定的精度和小数位数占用不同字节数。m最大为65,d最大为30。

例如,我们创建表 t4,其内有类型为 float(4,2) 的 n1 字段,类型为 float 的 n2 字段,以及类型为 decimal 的 n3 字段,其中float(4,2)表示n1字段数据总长度为4,小数位数为2,所以范围为-99.99到99.99,当我们插入超过此范围的数字时就会报错。

并且我们发现插入小数位数超过2位时会发现四舍五入。

如果向类型为 float 的 n2 字段插入数据时则不会强制保留小数位数

但是当插入的数据长度过长则会影响精度,float一般用于存储大约7位有效数字的浮点数,double用于存储大约15位有效数字的浮点数。

但是向类型为 decimal 的 n3 字段插入数据时则不会影响精度。

这是因为,decimal类型占用的空间不是固定的,其会根据精度的需要,调整占用的内存,确保可以精确保存这个精度的所有值。

字符串类型

类型说明
char(L)固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。
varchar(L)可变长度字符串,占用的字节数根据存储的数据长度而变化,最多65,535字节。

使用案例:

我们定义了表t5,其内有类型为 char(6) 的 s 字段,类型为 varchar(6)  的 vs 字段,在 c/c++ 中,中文汉字占两个或三个字节,但是我们定义的vs可以放下 ' 我爱你,中国 ' 这一段话,说明其参数表示的是字符的个数而非字节数。

那么关于varchar(L),L到底是多大,这个L值,和表的编码密切相关:
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 比较
即char的长度是定义时就固定好了,而varchar是是会随着使用而增加,但不会超过定义时的长度。
  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  • 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。
  • 定长的意义是,直接开辟好对应的空间
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。
类型说明
text

text类型是用于存储大量文本数据的一种数据类型。

TEXT类型有四种规格:tinytext、text、mediumtext和longtext,它们的主要区别在于存储容量的不同。

TEXT类型的存储容量

  1. tinytext:最大可以存储255字节的文本数据。
  2. text:最大可以存储65,535字节(约64KB)的文本数据。
  3. mediumtex:最大可以存储16,777,215字节(约16MB)的文本数据。
  4. longtext:最大可以存储4,294,967,295字节(约4GB)的文本数据。

TEXT类型的特点

  • 存储容量大:适合存储文章、评论等大量文本内容。
  • 占用空间小:相比于varchar类型,TEXT类型在存储大量文本数据时占用的空间更小。
  • 不支持索引:TEXT类型的列不能被索引,这可能会影响查询性能。如果需要对TEXT类型的列进行索引,可以使用全文搜索引擎,如Elasticsearch,来提高文本数据的搜索性能。 

使用案例: 

 

日期和时间类型

类型用途格式存储需求
date用于存储日期,不包含时间部分YYYY-MM-DD,其中YYYY表示年份,MM表示月份,DD表示日期3个字节
datetime用于存储日期和时间,精确到秒。YYYY-MM-DD HH:MM:SS8个字节
timestamp时间戳,用于存储日期和时间,与DATETIME类型类似,但支持时区转换YYYY-MM-DD HH:MM:SS4个字节

例如我们定义了表time,其内有类型为 date 的 time1 字段,类型为 datetime  的 time2 字段,类型为 timestamp  的 time3 字段,我们可以先向 time1 和 time2 按格式插入数据,实际上 time3 一般使用和 time2 相同,但我们通常在定义 timestamp 类型的列时添加 default current_timestamp on update current_timestamp 属性使其有自动更新的特性,在插入或更新数据时,如果没有指定该列的值,它会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

例如,我们修改 time3 列属性。

我们再次只向 time1 和 time2 插入数据,而 time3 会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

enumset

enum :枚举, 单选 类型;
enum('选项1','选项2','选项3',...);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“ 数字 ,因为这些选项的每个选项值依次对应如下数字: 1,2,3,.... 最多 65535 个;当我们添加枚举值时,也可以添加对应的数字编号。
set :集合, 多选 类型;
set('选项值1','选项值2','选项值3', ...);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“ 数字 ,因为这些选项的每个选项值依次对应如下数字: 1,2,4,8,16,32 .... 最多64 个,即每个值对应一个比特位。
例如我们定义了表votes,其内有类型为 char 的 name 字段,类型为 enum  的 gender 字段,类型为 set  的 hobby 字段,我们依次插入元素。
如果我们想查找所有喜欢跳舞的人,使用如下查询语句
不能查询出所有,爱好为跳舞的人。
集合查询使用 find_ in_ set 函数:
find_in_set(sub,str_list) 

如果 sub str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。

SELECT FIND_IN_SET('b', 'a,b,c,d'); -- 结果:2,因为 'b' 在strlist集合中位置为2,'a' 是位置1
SELECT FIND_IN_SET('1', '1'); -- 结果:1,特殊情况,只有一个字符串
SELECT FIND_IN_SET('2', '1,2'); -- 结果:2
SELECT FIND_IN_SET('6', '1'); -- 结果:0,strlist中不存在 '6',所以返回0

接下来我们使用以下语句查询

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

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

相关文章

【WPF】Prism学习(三)

Prism Commands 1.复合命令(Composite Commanding) 这段内容主要介绍了在应用程序中如何使用复合命令(Composite Commands)来实现多个视图模型(ViewModels)上的命令。以下是对这段内容的解释: …

用go语言后端开发速查

文章目录 一、发送请求和接收请求示例1.1 发送请求1.2 接收请求 二、发送form-data格式的数据示例 用go语言发送请求和接收请求的快速参考 一、发送请求和接收请求示例 1.1 发送请求 package mainimport ("bytes""encoding/json""fmt""ne…

SpringCloud Alibaba入门简介和Nacos服务注册和配置中心

前面已经把spring cloud相关的组件都一一学了个遍,现在有点小佩服自己…本来计划今天周末好好出去玩一圈,天气太热了,39了都,还是在办公室学习吧,进行下面的springCloud Alibaba 学习吧…不废话了赶快进入正体 1. SpringCloud Alibaba入门简介 1.1 why会出现SpringCloud alib…

如何让Excel公式中的参数实现动态引用

如果你想成为Excel函数高手,仅仅掌握VLOOKUP和Countif等函数是远远不够的,起码你得学会使用INDIRECT函数,熟练掌握INDIRECT函数能让你从一个初学者晋级为高手,学会它就好比孙悟空掌握了72般变化的基本功,你说厉不厉害。…

【流量分析】常见webshell流量分析

免责声明:本文仅作分享! 对于常见的webshell工具,就要知攻善防;后门脚本的执行导致webshell的连接,对于默认的脚本要了解,才能更清晰,更方便应对。 (这里仅针对部分后门代码进行流量…

车载诊断架构 --- 关于DTC的开始检测条件

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

掌握 Spring Boot 的最佳方法 – 学习路线图

在企业界,人们说“Java 永垂不朽!”。但为什么呢?Java 仍然是开发企业应用程序的主要平台之一。大型公司使用企业应用程序来赚钱。这些应用程序具有高可靠性要求和庞大的代码库。根据Java开发人员生产力报告,62% 的受访开发人员使…

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节,首先需要考虑的是一块连续区域分配的过程,这个过程中会有很多问题,首先比较关注的一个问题是…

MySQL学习/复习3约束

一、表的常用约束 二、null、not null 三、默认值default 3.1default与null 四、注释commen 注意事项:desc查不到注释 五、zerofill 5.1填充0以控制宽度 六、primary_key 6.1复合主键 七、auto_increment 7.1last_insert_id() 八、unique 8.1unique与primary_key …

python视频编辑中的蒙版技术:创意与技术相结合

在数字视频编辑的世界里,蒙版技术是一种强大的工具,它允许我们在视频帧上进行精确的编辑和效果叠加。通过蒙版,我们可以控制哪些部分的视频内容被显示或隐藏,从而创造出各种视觉效果和过渡。在本文中,我们将探讨如何使…

文件操作和IO

目录 一. 文件预备知识 1. 硬盘 2. 文件 (1) 概念 (2) 文件路径 (3) 文件类型 二. 文件操作 1. 文件系统操作 [1] File常见的构造方法 [2] File的常用方法 [3] 查看某目录下所有的目录和文件 2. 文件内容操作 (1) 打开文件 (2) 关闭文件 (3) 读文件 (4) 写文件 …

PCB结构与组成

PCB板就是印制电路板,又称印刷电路板,是电子元器件电气连接的提供者。PCB板转化成我们所熟悉的电路板过程如下: 了解完定义,下面是我们电路板的标识 可简单的把PCB板拆分成六个部分:导线、铺铜、过孔、焊盘、丝印、阻焊…

OrienterNet在二维公共地图实现视觉定位的模型

论文来自MetaAI: https://arxiv.org/pdf/2304.02009https://arxiv.org/pdf/2304.02009github代码: https://github.com/facebookresearch/OrienterNet?tabreadme-ov-filehttps://github.com/facebookresearch/OrienterNet?tabreadme-ov-file 研究目…

LEAN 之 多态机制(Polymorphism,Type class)简析

LEAN 通过 类型类(Type Class)来提供的多态机制(Polymorphism)。 以∅:Set α 为例,有 Set α 实现 class EmptyCollection。 其中,class EmptyCollection 定义如下: 也就是&#xf…

【微软:多模态基础模型】(1)从专家到通用助手

欢迎关注【youcans的AGI学习笔记】原创作品 【微软:多模态基础模型】(1)从专家到通用助手 【微软:多模态基础模型】(2)视觉理解 【微软:多模态基础模型】(3)视觉生成 【微…

基于java的社区捐赠物品管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

机器学习—建立表现基准

让我们来看看一些具体的数字,Jtrain和Jcv是什么,以及如何做出判断,如果学习算法具有高偏差或高方差,使用一个语音识别应用的例子作为讲解。 很多在手机上进行网络搜索的用户会使用语音识别,而不是在手机上的小键盘上打…

阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统

近期,阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress,ReactPress一个基于 Next.js 的博客和 CMS 系统,可查看 demo站点。(fecommunity 投稿) ReactPress:一款值得推荐的开源发布平台 …

大学语文教材电子版(第十一版)教学用书PDF及课件

大学语文课件:https://caiyun.139.com/m/i?005CiDusEVWnR 《大学语文》(第十一版)主编:徐中玉 齐森华 谭帆。 大学语文教材电子版教师用书PDF第一课《齐桓晋文之事》艺术赏析: 孟子四处游说,养成善辩的…

RK356x-8:Wifi模块AP6xxx配置与调试

本文记录如何根据原理图,配置和调试RK356x(测试用RK3566)主板上wifi/蓝牙模块(测试用AP6212,rkwifibt),使其能正确连网。 1.配置SOC接口 1.1 查看原理图,看看wifi模块用的接口是什…