【MySQL】数据类型(常见类型)-- 详解

一、数据类型分类


二、数值类型


1、tinyint 类型

在 MySQL 中,整型可以指定是有符号的和无符号的,默认是有符号

有符号:

插入数据越界测试:

在 MySQL 表中建立属性列时,我们可以发现列名称在前,类型在后。

比如:num tinyint (unsigned)


无符号(unsigned):

可以通过 unsigned 来说明某个字段是无符号的。 

插入数据越界测试:

char a = 1234567;

  • C/C++ 中,编译器不会报错,最多也就是报警,这里会发生截断,甚至发生隐式转换
  • MySQL 中,在特定的类型中插入不合法的数据,一般会发生拦截,不让我们做对应的操作。

反过来,如果已经有数据被成功插入到 MySQL 中,那么说明插入时一定是合法的。

所以,在 MySQL 中,一般而言,数据类型本身也是一种约束

(能够保证数据库中的数据是可预期、完整的)

注意 :尽量不使用 unsigned,对于 int 类型可能存放不下的数据,int unsigned 同样可能存放不下,与其如此,还不如在设计时,将 int 类型提升为 bigint 类型。

2、bit 类型

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

插入数据越界测试:

 

为什么下图中的 online 列没有显示内容?

因为 online 是位类型,在显示 0/1 时,是按照 ASCII 码值显示的。只不过当前显示的 ASCII 码值是不可显示的。

如果想在 online 列显示内容,可以输入 select id, hex(online) from t3;(让 online 按照十进制方案插入位结构)

修改 online 的 bit 位:

插入成功:

  • bit 字段在显示时,是按照 ASCII 码对应的值显示。
  • 如果我们有这样的值,只存放 0/1,这时可以定义 bit(1),可以节省空间。

3、小数类型

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

插入数据越界测试: 

小数:float(4,2) 表示的范围是 -99.99~99.99默认是有符号浮点数。

MySQL 在保存值时会进行四舍五入

注意:在合法范围内允许五入,但在边界值五入会导致整体的浮点数增多,从而超过浮点数对应的范围,所以不是所有情况都可以五入


unsigned:

如果定义的是 float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0~99.99(相当于有符号浮点数删减去负数取值部分)。

插入数据越界测试: 

整数部分也可能有精度损失。


(2)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 表示的精度大约是 位。(会发生截断或四舍五入)​​​​​​​
  • decimal 整数最大位数 为 65。支持小数最大位数 是 30如果 被省略,默认为 0。如果 被省略,默认是 10(完全保证精度准确)
建议如果希望小数的精度高,推荐使用 decimal。

三、字符串类型

1、char

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过 2 个, 最多只能是 255。​​​​​​​
插入数据越界测试:  ​​​​​​​
  • 在 utf-8 中一个汉字一般占 3 个字节,在 gbk 中一个汉字一般占 2 个字节。
注意:char 类型的单位为字符,MySQL 中的字符和 C/C++ 中的字符概念同,语言上的字符是一个字符对应一个字节,而这里的一个字符就是代表一个符号。

2、varchar

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

插入数据越界测试: 

varchar 长度可以指定为  0~ 65535  之间的值,但是有  1~3 个字节用于记录数据大小,所以说有效字节数是 65532。
  • 当我们的表的编码是 utf-8 时,varchar(n) 的参数 最大值是 65532/3=21844因为在 utf 中,一个字符占用 个字节)。
  • 如果编码是 gbkvarchar(n) 的参数 最大是 65532/2=32766(因为 gbk 中,一个字符占用 字节)。

​​​​​​​


3、char 和 varchar 比较

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

四、日期和时间类型


1、date

date 日期格式:'yyyy-mm-dd',占用 3 字节。​​​​​​​


2、datetime

datetime 时间日期格式:'yyyy-mm-dd HH:ii:ss' 表示范围为 1000~9999 ,占用 8 字节。​​​​​​​​​​​​​​


3、timestamp

timestamp 时间戳会自动更新从 1970 年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用 4 字节。


五、enum 和 set

​​​​​​​

插入数据越界测试: 


1、enum

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

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


2、set

  • set:集合,多选” 类型;
  • set('选项值1', '选项值2', '选项值3', ...);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是 “ 数字 ,因为这些选项的每个选项值依次对应如下数字: 1,2,4,8,16,32 ...  最多  64  个。
1 对应的就是 '选项值1',2 对应的是 '选项值2',3 对应的是 '选项值1,选项值2'...跟二进制比特位的计数有关。 比特位由低到高依次对应的是选项值从左向右。
说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。

3、集合查询使用 find_ in_ set 函数

​​​​​​​

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

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

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

相关文章

深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】

深入探索pdfplumber:从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中,PDF文档是一种常见的格式。然而,要从PDF中提取信息并进行进一步的分析,我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…

华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)---Python3--开源

题目: 考察内容: for if max 代码: """ 题目分析:投资额*回报率投资回报 要在可接受范围内选择最优的投资方式获得最大回报最多投资2个理财产品输入: 产品数int; 总投资额int; 总风险int 产品投资…

C++入门学习(三十七)函数分文件编写【DEV】

创建.h后级名的头文件创建.cpp后缀名的源文件在头文件中写函数的声明在源文件中写函数的定义 一、选择文件、新建、项目 二、 选择Empty Project 三、 新建源文件New File 四、贴代码 test.cpp #include <iostream> #include "add.h" using namespace std;i…

《TCP/IP详解 卷一》第4章 地址解析协议ARP

目录 4.1 引言 4.2 一个例子 4.3 ARP缓存 4.4 ARP帧格式 4.5 ARP例子 4.6 ARP缓存超时 4.7 代理ARP 4.8 免费ARP和地址冲突检测 4.9 ARP命令 4.10 使用ARP设置嵌入式设备IPv4地址 4.11 与ARP相关攻击 4.12 总结 4.1 引言 地址解析&#xff1a; IPv4&#xff1a;AR…

基于Springboot实现课程评分系统设计和实现

基于java Springboot实现课程评分系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

Linux基础知识——命令行模式下命令的执行

文章目录 Linux基础知识——命令行模式下命令的执行开始执行Linux命令Linux基础命令的操作常用Linux命令行操作按键Linux输出错误信息查看 Linux系统在线帮助--help选项man命令info命令其他有用的文件文档百度搜索 文本编辑器&#xff1a;nanonano启动&#xff01; 正确关机方法…

__proto__和protype的区别

概述&#xff1a; prototype 函数静态属性&#xff0c;非实例属性,所有实例都可以继承它 __proto__ 实例属性&#xff0c;指向实例的原型对象&#xff0c;原型对象包括构造函数和protype属性 替代 现代浏览器中可以使用Object.getPrototypeOf()来替代__proto__来获取原型对象 …

Vue3自定义组件v-model双向绑定

无能吐槽一下&#xff0c;虽然用了很多遍v-model&#xff0c;但是还是不得要领&#xff0c;每次看官网都感觉说的不是很清晰&#xff0c;在写的时候还是要查看文档&#xff0c;可能就是不理解原理&#xff0c;这次特意好好写一篇文章&#xff0c;让自己好好理解一下。 自定义一…

单线程传奇Redis,为何引入多线程?

大家都知道 Redis 的速度非常的快&#xff0c;这其中一个关键原因就是它采用了单线程模型&#xff0c;这也是它的一大独特之处。那么问题来了&#xff0c;既然单线程模型已经如此出色&#xff0c;为什么后续版本还要搞上多线程呢&#xff1f; 本文主要分析一下多线程在Redis中的…

推出新款H7-TOOL 2024版,同时发布新版固件V2.25(2024-02-24)

H7-TOOL 2024版介绍 1、开模定制外壳&#xff0c;取消了侧面的IO接口&#xff0c;汇集到一个主端口&#xff08;2 * 17P排针&#xff09;。 2、显示屏升级为2.8寸&#xff08;分辨率320*240)。 3、两个按键升级为4个按键&#xff1a;上键、下键&#xff0c;OK确认键和C取消键。…

【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)

Flink 内存管理&#xff08;二&#xff09;&#xff1a;JobManager 内存分配 1.分配 Total Process Size2.分配 Total Flink Size3.单独分配 Heap Size4.分配 Total Process Size 和 Heap Size5.分配 Total Flink Size 和 Heap Size JobManager 是 Flink 集群的控制元素。它由三…

【经验分享】分类算法与聚类算法有什么区别?白话讲解

经常有人会提到这个问题&#xff0c;从我个人的观点和经验来说2者最明显的特征是&#xff1a;分类是有具体分类的数量&#xff0c;而聚类是没有固定的分类数量。 你可以想象一下&#xff0c;分类算法就像是给你一堆水果&#xff0c;然后告诉你苹果、香蕉、橙子分别应该放在哪里…

Kotlin 基本语法5 继承,接口,枚举,密封

1.继承与重写的Open关键字 open class Product(val name:String ) {fun description() "Product: $name"open fun load() "Nothing .."}class LuxuryProduct:Product("Luxury"){//继承需要调用 父类的主构造函数override fun load(): String {…

自定义 Git Hook

前言 前端同学大概都熟悉 husky 这个工具&#xff0c;他可以直接在项目中添加 git hooks&#xff0c;主要解决了 git hooks 不会同步到 git 仓库的问题&#xff0c;保证了每个开发人员的本地仓库都能执行相同的 git hooks。 但是 husky 毕竟是一个 JS 生态的工具&#xff0c;…

ONLYOFFICE桌⾯应⽤程序v8.0:功能丰富,⽀持多平台

文章目录 可填写的 PDF 表单RTL支持电子表格中的新增功能其他改进和新增功能与 Moodle 集成用密码保护 PDF 文件快速创建文档本地界面主题总结 继 ONLYOFFICE 文档 v8.0 的发布后&#xff0c;很高兴&#xff0c;因为适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序…

【elementUi-table表格】 滚动条 新增监听事件; 滚动条滑动到指定位置;

1、给滚动条增加监听 this.dom this.$refs.tableRef.bodyWrapperthis.dom.scrollTop 0let _that thisthis.dom.addEventListener(scroll, () > {//获取元素的滚动距离let scrollTop _that.dom.scrollTop//获取元素可视区域的高度let clientHeight this.dom.clientHeigh…

Matlab/simulink基于MPPT风光储微电网建模仿真(持续更新)

​ 2.Matlab/simulink基于MPPT风光储微电网建模仿真&#xff08;持续更新&#xff09; 1.Matlab/simulink基于vsg的风光储调频系统建模仿真&#xff08;持续更新&#xff09;

QT 打包命令 windeployqt 在windows平台应用

本文以qt6.2.4 MSVC2019 为例&#xff0c;描述打包过程。 前置条件&#xff1a;已经生成了可执行文件&#xff0c;比如xxx.exe 1.在搜索框输入QT,点击QT6.2.4(MSVC 2019 64-bit) 以你实际安装的版本为准。 2.出现如下黑屏命令行 3.在QT 项目文件下新建一个打包文件夹&#x…

VIO第2讲:IMU标定实验

VIO第2讲&#xff1a;IMU标定实验 文章目录 VIO第2讲&#xff1a;IMU标定实验5 IMU标定实验5.1 仿真数据产生5.1.1 c代码分析5.1.2 生成ros包数据 5.2 Allan方差实验&#xff08;港科大imu_utils&#xff09;5.2.1 安装5.2.2 运行 5.3 Allan方差实验&#xff08;matlab代码kali…

Vue局部注册组件实现组件化登录注册

Vue局部注册组件实现组件化登录注册 一、效果二、代码1、index.js2、App.vue3、首页4、登录&#xff08;注册同理&#xff09; 一、效果 注意我这里使用了element组件 二、代码 1、index.js import Vue from vue import VueRouter from vue-router import Login from ../vie…