【MySQL】数据类型{tinyint/bit/float/decimal/char/varchar/date/enum/set}

文章目录

  • 1.数据类型分类
  • 2.数值类型
    • 2.1tinyint 1字节
    • 2.2bit 0-64位
    • 2.3浮点类型
      • float 4个字节
      • decimal
  • 3.字符串类型
    • char开多少空间为多大
    • varchar开多少是上限 存多少占多大空间
    • 日期和时间类型
    • enum和set
      • enum:枚举,“单选”类型;
      • set:集合,“多选”类型;
      • find_in_set(sub,str_list) :

1.数据类型分类

为什么要有这么多数据类型?

在应用场景和节省资源间趋于平衡

菜鸟教程
在这里插入图片描述

2.数值类型

1个字节8比特位无符号全0到全1,8个1是2^8-1
有符号10000000到011111111:2^ 7, 2^7-1

类型字节最小值最大值
TINYINT1-128127
0255
SMALLINT2-3276832767
065535
MEDIUMINT3-83886088388607
016777215
INT4-21474836482147483647
04294967295
BIGINT892233720368547758089223372036854775807
018446744073709551615

2.1tinyint 1字节

在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
可以通过UNSIGNED来说明某个字段是无符号的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

char= 1234567;//C/C++中允许大数据给小类型–截断–隐式转换
如果向mysql特定的类型中插入不合法的数据,MSQL一般都是直接拦截,不让我们做对应的操作!
反过来,如果我们已经有数据被成功插入到mysql中了,一定插入的时候是合法的!
所以,mysql中,一般而言,数据类型本身也是一种: 约束
保证数据库中的数据是可预期,完整的
限制程序员,让程序员尽可能进行正确的插入
约束的是使用者!
如果你不是一个很好的使用者,mysql也能保证数据插入的合法性

2.2bit 0-64位

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
bit字段在显示时,是按照ASCII码对应的值显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3浮点类型

float 4个字节

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

float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。
是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 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表示的精度不一样
float表示的精度大约是7位。
decimal整数最大位数m为65省略为10。支持小数最大位数d是30省略为0。
建议:如果希望小数的精度高,推荐使用decimal。

在这里插入图片描述
在这里插入图片描述

3.字符串类型

char开多少空间为多大

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
之前学的一个字符就是一个字节 mysql中一个字符就是一个符号!
char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255
在这里插入图片描述
在这里插入图片描述

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字节)。
实际上,如果该表中还有其他字段,最大也开不到21844,因为mysql有行大小限制。

了解行大小限制

这个错误 ERROR 1118 (42000): Row size too large 通常出现在使用 MySQL 数据库时,尤其是当你尝试在一个表中创建大量的列,或者某些列的数据类型占用了大量的空间,导致整行的总大小超过了 MySQL 允许的最大值(对于 InnoDB 存储引擎,默认的最大行大小限制是 65,535 字节,这包括了所有固定长度的列、可变长度的列(如 VARCHAR、VARBINARY)以及记录头信息)。

要解决这个问题,你可以采取以下几种策略:

将大字段转换为 TEXT 或 BLOB 类型:
如果你的表中包含了一些非常大的字段(如大文本或二进制数据),考虑将这些字段的类型从 VARCHAR、CHAR 等转换为 TEXT 或 BLOB。TEXT 和 BLOB 类型可以存储大量数据,并且不会计入最大行大小的限制中(但是请注意,它们仍然受到最大行长度限制的影响,只是以不同的方式计算)。
优化数据类型:
检查并优化你的数据类型。例如,如果某个字段存储的数值范围很小,但是使用了 INT 类型,你可以考虑将其更改为 SMALLINT 或 TINYINT。
对于 VARCHAR 类型,检查并设置合理的最大长度。如果某个 VARCHAR(255) 字段实际上从未存储超过 50 个字符的数据,那么你可以将其更改为 VARCHAR(50)。
分割表:
如果表中有大量列,并且业务逻辑允许,考虑将表拆分为多个较小的表。每个表包含相关的列,并通过外键或应用逻辑来维持它们之间的关系。
使用 ROW_FORMAT=DYNAMIC 或 COMPRESSED:
对于 InnoDB 存储引擎,你可以尝试更改表的行格式来允许更大的行大小。通过设置 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED,你可以增加允许的行大小(注意,这仍然有一个上限,但比默认的 COMPACT 格式要大)。
你可以通过 ALTER TABLE 语句来更改表的行格式:
sql
ALTER TABLE your_table_name ROW_FORMAT=DYNAMIC;
检查和修改存储引擎:
如果你的应用不特别依赖于 InnoDB 的特性(如事务处理、行级锁定等),并且你可以接受其他限制,你可以考虑使用 MyISAM 存储引擎,它允许更大的行大小(但请注意,MyISAM 不支持事务处理或外键等)。
评估是否需要所有列:
评估你的应用是否真的需要表中的所有列。有时候,一些列可能不再需要,或者可以通过其他方式(如计算字段或查询时的临时计算)来获取。
通过上述方法,你应该能够解决 Row size too large 的错误,并优化你的数据库表结构。

在这里插入图片描述

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

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

在这里插入图片描述
在这里插入图片描述

日期和时间类型

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

在这里插入图片描述

enum和set

enum:枚举,“单选”类型;

enum(‘选项1’,‘选项2’,‘选项3’,…);
该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

set:集合,“多选”类型;

set(‘选项值1’,‘选项值2’,‘选项值3’, …);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…最多64个。
说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NULL vs ’ ’

空表示什么都没有不存在;’ '表示存在为空

枚举和集合按数字插入的不同 枚举表示1~n的下标 集合表示位图

在这里插入图片描述

find_in_set(sub,str_list) :

如果 sub 在 str_list 中,则返回下标;如果不在,返回0;str_list 用逗号分隔的字符串。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

用网上抓取的天气的接口做了一个系统

这个接口数据太全了了,空气质量、雷达预报、小时预报、15天预报、实况、aqi排名,云量、预警、生活指数包圆了,数据接口如下图所示: 万年历 万年历接口 行政区划边界GEOJSON 国家统计局区划编码 全国城市区划编码经纬度 天气实况 …

10计算机视觉—物体检测算法

目录 1.R-CNN(区域卷积神经网络)2014兴趣区域(RoI)池化层Fast RCNN 2015Faster R-CNN 2015Mask R-CNN 2017总结2. SSD(单发多框检测)2016SSD模型总结3.YOLO(你只看一次)快!很重要4.目标检测算法性能对比5.SSD代码实现 使用很少,比不上yolo多尺度锚框实现SSD代码实现训练…

浅谈渗透测试实战

很多时候,在看白帽子们的漏洞的时候总有一种感觉就是把web渗透简单地理解成了发现web系统漏洞进而获取webshell。其实,个人感觉一个完整的渗透(从黑客的角度去思考问题)应该是以尽一切可能获取目标的系统或者服务器的最高权限&…

Go语言工程管理

本文内容为Go工程创建和配置开发及简单程序示例。 目录 工程管理 GOPATH 配置GOPATH GOROOT 新建系统变量 配置go工程 添加go path 简单的程序实现 程序代码 开始运行 运行结果 内容解析 总结 工程管理 GOPATH go语言的项目,需要有特定的目录结构进行…

【人工智能】GPT-5的即将到来:从高中生进化到,,,博士生?

GPT-5的即将到来:从高中生进化到,博士生? 随着近月GPT-4o的出世,OpenAI也在进行一系列的采访和介绍接下来的展望和目标。 在6月22日的采访中,美国达特茅斯工程学院公布了OpenAI首席技术官米拉穆拉蒂的访谈内容。穆拉蒂确认&#…

urfread刷算法|构建一棵树

大意 示例标签串: 处理结果: 题目1 根据标签串创建树 需求 需求:给出一个字符串,将这个字符串转换为一棵树。 字符串可以在代码里见到,是以#开头,按照\分割的字符串。 你需要将这个字符串&#xff0…

ChatGPT 论文助手:如何用 AI 技术加速学术写作过程

ChatGPT在论文写作中的应用 ChatGPT作为一个先进的语言模型,在学术论文创作领域提供显著帮助。它不仅提升学生与研究者的写作效率,还优化论文质量并引入创新观点。以下是ChatGPT在论文写作中的几种具体应用: 提升写作效率 生成写作构思&…

数据结构——树的基础概念

目录 1.树的概念 2.树的相关概念 3.树的表示 (1)直接表示法 (2)双亲表示法 (3)左孩子右兄弟表示法 4.树在实际中的运用(表示文件系统的目录树结构) 1.树的概念 树是一种非线性的数据结构&#xff0…

【机器学习】分类算法-KNN算法实现

一、前言 最近,在学习机器学习相关的内容,就想着能不能跑一些机器学习的Demo,这样更方便后期的学习,于是在B站上,找了一个Up主【abilityjh】的视频,跟着学,跟着敲代码,自己在博客上将学的东西&a…

轻松搞定Docker!教你一键删除所有镜像!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 Docker 是一种流行的容器化平台,它提供了一种轻量级且可移植的方式来打包、分发和运行应用程序。 在使用 Docker 进行应用程序开发和部署时,我们通常会创建和使用各种镜像。然而,随着时间的推移,我们可能会积累大量的镜…

【C语言】volatile 关键字

在C语言中,volatile关键字用于声明一个变量,告知编译器该变量的值可能会被程序之外的某些因素(如硬件或其他并发线程)改变。因此,编译器在优化代码时不能对这个变量做假设,也不能优化掉对它的读取或写入操作…

Python学习笔记六

1.实现4*4随机矩阵 #生成一个随机4*4的数组 import numpy as np np.random.seed(1)#固定随机数 每次都是同一个 ()里面的数字不同 对应的随机数也不同 np.random.rand() anp.random.randint(0,100,16).reshape(4,4)#0~100的随机整数 包含16个元素 pri…

[JS]正则表达式

介绍 正则表达式是定义匹配字符串的规则, 在JS中, 正则表达式也是对象, 通常用于查找或替换符合规则的文本 许多语言都支持正则表达式, 在前端中常见的场景就是表单验证和敏感词替换 语法 正则字面量 / / const str 好好学习,天天向上 // 1.定义规则: const reg /好///…

2024年上半年网络工程师下午真题及答案解析

试题一(20分) 某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。两校区默认由本地…

第6章:结构化开发方法

第6章:结构化开发方法 系统设计基本原理 1、抽象 抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不是很重要或非本质的方面。 模块化 模块化是指将一个待开发的软件分解成若干个小的、简单的部分一模块,每个模…

出海创新 | 璞华国际参加全球数字经济大会,助力出海创新生态合作

7月3日,2024全球数字经济大会“数字生态出海发展论坛”在国家会议中心(北京)隆重召开。本次论坛以“数字蓝海,扬帆远航”为主题,隆重启动“北京数字经济企业出海创新服务基地”,正式发布数字经济企业细分领…

模型情景制作-如何制作棕榈树

夏天,沙滩,海景,棕榈树,外加美女,想象下热带海滨的样子吧 可是口年的上班族没有多少机会去到海滩,肿么办?我们自己DIY一个海滨情景摆在办公桌上吧~~~ 什么什么?棕榈树不会做&#xf…

股指期货价格与股指现货价格是什么关系?

股指期货价格和股指现货价格之间的关系,可以想象成两个好朋友,他们总是想要保持一致的步伐,但有时候因为各种原因,他们的步伐会出现一些差异。 1. 正向市场 在这种情况下,股指期货的价格通常比现货价格要高一些。这就…

UE5 修改项目名称 类的名称

修改类的名称 这里推荐使用Rider编辑器修改,它会给你遍历所有的引用,然后一次性修改,并自动添加DefaultEngine.ini。接下来,我将给大家演示如何实现。 我们在一个类的文件上面选择重构此 然后选择重命名 在弹框内修改为新的名称…