【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.xdnf.cn/news/1472418.html

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

相关文章

数字人大赋能未来治理新篇章,正宇软件助力人大建设新实践

在全面贯彻落实党的二十大精神的开局之年,数字中国战略的深入实施如同一股强劲的东风,吹遍了神州大地的每一个角落。作为数字中国建设的重要组成部分,数字人大作为现代信息技术与人大工作深度融合的产物,正以其独特的魅力和深远的…

自定义代理编辑控件类TComboBoxDelegate

自定义代理编辑控件是在tableView单元格中,呈现编辑辅助的Combox控件 自定义代理编辑控件类TComboBoxDelegate的定义过程 重写自定义代理编辑组件类的四个方法: 创建编辑组件、模型赋值给代理编辑组件、代理编辑组件数据到模型、更新位置 .h #ifndef TC…

google::protobuf命名空间下常用的C++ API----message.h

#include <google/protobuf/message.h> namespace google::protobuf 假设您有一个消息定义为: message Foo {optional string text 1;repeated int32 numbers 2; } 然后&#xff0c;如果你使用 protocol编译器从上面的定义生成一个类&#xff0c;你可以这样使用它: …

docker介绍与详细安装

1 docker 介绍 1.1 虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打破实…

docker部署wg-easy和firefly

Background WireGuard是一种新型的VPN协议,它通过在内核层运行,提供高效、安全、简单和现代的VPN解决方案。wg-easy是一个专为简化 WireGuard VPN配置和管理而设计的工具&#xff0c;提供了界面化的管理&#xff0c;进一步降低WireGuard 的使用门槛&#xff0c;让用户无需深入了…

嵌入式Linux系统编程 — 6.7 实时信号

目录 1 什么是实时信号 2 sigqueue函数 3 sigpending()函数 1 什么是实时信号 等待信号集只是一个掩码&#xff0c;它并不追踪信号的发生次数。这意味着&#xff0c;如果相同的信号在被阻塞的状态下多次产生&#xff0c;它只会在信号集中被记录一次&#xff0c;并且在信号集…

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro&#xff0c;Gemini 1.5 Pro不仅能够生成创意文本和代码&#xff0c;还能理解、总结上传的图片、视频和音频内容&#xff0c;并且支持高达100万tokens的上下文。在多个基准测试中表现优异&#xff0c;性能超越了ChatGP…

node 下载文件到网络共享目录

1、登录网络共享计算器 2、登录进入后复制要存储文件的目录路径 例如&#xff1a; \\WIN-desktop\aa\bb\cc 3、node 下载后写入网络共享目录 注意&#xff08;重要&#xff09;:在使用UNC路径时&#xff0c;请确保你正确转义了反斜杠&#xff08;使用两个反斜杠来表示一个&…

Ubuntu 22.04远程自动登录桌面环境

如果需要远程自动登录桌面环境&#xff0c;首先需要将Ubuntu的自动登录打开&#xff0c;在【settings】-【user】下面 然后要设置【Sharing】进行桌面共享&#xff0c;Ubuntu有自带的桌面共享功能&#xff0c;不需要另外去安装xrdp或者vnc之类的工具了 点开【Remote Desktop】…

跑冒滴漏智能识别摄像机

对于现代城市管理来说&#xff0c;跑冒滴漏智能识别摄像机正逐渐成为解决水管漏水问题和保护城市供水安全的重要工具。这类摄像机通过先进的视觉识别和数据分析技术&#xff0c;能够有效监测和识别城市管道系统中的漏水现象&#xff0c;对于提升供水系统效率和保障城市居民生活…

探寻操作系统文件名字符限制的规则和历史

引言 从最早的电脑系统到现代的操作系统&#xff0c;文件命名的规则一直在不断发展&#xff0c;这些规则体现了不同操作系统设计哲学的差异。作为开发者&#xff0c;了解这些差异和背后的历史渊源非常有价值&#xff0c;本文将详细探讨Windows、macOS和Linux三大主流操作系统在…

栈实现队列与队列实现堆

ok呀&#xff0c;上一篇博客写了队列的相关知识&#xff0c;接下来就是我们提及过的&#xff0c;栈与队列的相互实现了。堆与这个问题咧&#xff0c;其实大家完全可以当一个知识扩展因为&#xff0c;这个问题也是没有太多的实践意义的&#xff0c;更多的是教学意义。所以咧。大…

服务器数据恢复—DS5300存储raid5阵列数据恢复案例

服务器存储数据恢复环境&#xff1a; 某单位一台某品牌DS5300存储&#xff0c;1个机头4个扩展柜&#xff0c;50块硬盘组建2组RAID5磁盘阵列&#xff08;一组raid5阵列有27块成员盘&#xff0c;存放Oracle数据库文件&#xff1b;另外一组raid5阵列有23块成员盘&#xff09;。存储…

Jmeter使用JSON Extractor提取多个变量

1.当正则不好使时&#xff0c;用json extractor 2.提取多个值时&#xff0c;默认值必填&#xff0c;否则读不到变量

c进阶篇(四):内存函数

内存函数以字节为单位更改 1.memcpy memcpy 是 C/C 中的一个标准库函数&#xff0c;用于内存拷贝操作。它的原型通常定义在 <cstring> 头文件中&#xff0c;其作用是将一块内存中的数据复制到另一块内存中。 函数原型&#xff1a;void *memcpy(void *dest, const void…

长难句打卡7.4

But policymakers who refocus efforts on improving well-being rather than simply worrying about GDP figures could avoid the forecasted doom and may even see progress. 但政策制定者们应重新集中精力于提升&#xff08;社会&#xff09;幸福感&#xff0c;而非仅仅担…

Unity 资源 之 Sweet Cakes Icon套装,110个高品质蛋糕图标分享

Sweet Cakes Icon 套装 - 为 Unity 开发者带来甜蜜惊喜 前言资源包内容领取兑换码 前言 亲爱的 Unity 开发者们&#xff0c;今天要向你们介绍一款令人心动的图标套装 - Sweet Cakes Icon。 Sweet Cakes Icon 套装包含了超过 110 种高品质的蛋糕和纸杯蛋糕图标&#xff0c;这无…

鸿蒙开发HarmonyOS NEXT (三) 熟悉ArkTs

一、自定义组件 1、自定义组件 自定义组件&#xff0c;最基础的结构如下&#xff1a; Component struct Header {build() {} } 提取头部标题部分的代码&#xff0c;写成自定义组件。 1、新建ArkTs文件&#xff0c;把Header内容写好。 2、在需要用到的地方&#xff0c;导入…

去中心化 RAG 先行者,KIP Protocol 如何保护数据所有权、激活 AI 资产

AI 时代&#xff0c;人人都应实现 KnowledgeFi 的梦想或许并不遥远&#xff0c;KIP Protocol 正在生动践行这一价值理念&#xff0c;带动去中心化数字产权的创建与盈利&#xff0c;面向 CryptoAI 的蓝海市场迈出创新探索的技术步伐&#xff0c;朝着 Web3 行业打造去中心化 AI 的…

30斤用什么快递便宜?大件物品怎么寄划算省钱?

大学生小李最近因为毕业要搬家&#xff0c;不得不把一堆书籍、衣服和一些生活用品寄回家。作为一个精打细算的“穷学生”&#xff0c;小李可是不愿意在快递费上花冤枉钱的。于是&#xff0c;他开始研究各种寄快递省钱的方法&#xff0c;今天我们就来看看小李是怎么操作的。一、…