【Hello mysql】 mysql数据类型

news2024/11/15 11:28:41

Mysql专栏:@Mysql
本篇博客简介:介绍mysql的数据类型

mysql数据类型

    • 数据类型分类
    • 数值类型
      • tinyint类型越界测试
      • bit类型
      • 小数类型
        • float类型
        • decimal类型
      • 字符串类型
        • char
        • varchar
      • 时间和日期类型
      • enum和set
        • enunm
        • set
    • 总结

数据类型分类

为什么要存在数据类型呢?

mysql中存在数据类型主要是为了以下两点

  • 数据类型决定了自己需要多少的空间以及系统会给你分配多少的空间 数据库作为一个要使用磁盘空间的工具 数据类型的存在是必要的
  • 类型是一种约束 只允许向数据库插入合法的数据

mysql中常见的数据类型如下图:

在这里插入图片描述

数值类型

类型字节最小值最大值
TINYINT(无符号)10255
TINYINT(有符号)1-128127
INT(无符号)404294967295
INT(有符号)4-21474836482147483647
BIGINT(无符号)8018446744073709551615
BIGINT(有符号)8-92233720368547758089223372036854775807

tinyint类型越界测试

我们首先创建一张表 里面有tinyint数据类型的一列
在这里插入图片描述

之后我们往这一列中插入数据

在这里插入图片描述

我们发现 数据如果在tinyint的最小值与最大值之间则可以插入 如果不在这个范围则mysql直接报错

通过上面的现象我们也能很好的解释约束这一概念 即只允许插入合法的数据

bit类型

语法

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

实例:

在这里插入图片描述

我们尝试向t1这个表中插入两个数据

在这里插入图片描述

观察插入后的现象我们可以发现 int类型的数据可以正常插入 但是bit类型的数据显示的却十分奇怪

其实这些数据就是对应的ascll码值

也就是说对应bit类型的数据 在数据库表中会显示的是ascll码值

使用场景

当我们只需要使用0和1来标志一个值的时候我们可以定义bit(1)

小数类型

float类型

语法

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

实例

float(4,2)表示的范围是-99.99 ~ 99.99 MySQL在保存值时会进行四舍五入 即 99.994为99.99 99.995为100.00

下面的试验会验证上面所说的话

我们首先创建一个员工工资表 里面有员工的编号还有他们的薪水

在这里插入图片描述

接着我们往表中插入几组数据

在这里插入图片描述

我们可以发现salary的数据被限制在了-99.99 ~ 99.99之间 更准确的说是-99.994 ~ 99.994之间

如果我们将float限制为无符号数数据的范围会发生什么变化呢?

在这里插入图片描述

插入数据后我们可以发现

在这里插入图片描述

此时我们插入正值 0 ~ 99.994仍然可以成功 但是插入负值便会报错了

decimal类型

decimal类型与float类型的用法和特性基本相同

唯一一点需要我们注意的是decimal的精度要比float类型的精度高(float类型的精度大概为小数点后七位)

下面是试验证明

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们可以发现 当我们存储12.12345678这个数字的时候 decimal的数据能够正常储存 而floact类型的数据却失真了

所以说当我们想要存储小数点后更加精确的数字时我们可以使用decimal类型的数据

字符串类型

char

语法

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

案例(char)

我们创建一张表 其中姓名属性规定为两个字符

在这里插入图片描述

接着我们开始插入数据

在这里插入图片描述
我们发现当我们插入两个字母的时候可以插入 当我们插入三个字母的时候sql就报错了

当我们插入两个中文的时候可以插入 当我们插入三个中文的时候sql就报错了

此外char类型的最大长度为255

在这里插入图片描述

字符的含义

很奇怪的一点是 在我们之前学习C/C++阶段 我们知道一个字母所占的字节数和中文所占的字节数是不同的 那么在mysql中为什么将一个字母等同于一个中文呢

实际上不管是字母和汉字 在mysql中都将它们看作是一个字符 跟所占的字节数和大小都没有关系

在我下面的博客内容中会出现字符和字节两个词语 大家一定不要混淆!

varchar

语法

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

实际上varchar的用法和char类型也是一模一样的 不同的是varchar的储存大小还有它们的存储方式

varchar类型的存储大小

  • 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所占用的字节数恒为指定数 而varchar则遵循一个算法实时计算

如何选择变长和定长字符

  • 如果数据确定长度都一样,就使用定长(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 完全一致,占用
    四字节

在这里插入图片描述

之后我们插入一组时间数据

在这里插入图片描述

我们可以发现t1 t2的数据就是我们所插入的数据 而t3的数据就是现在的实时时间

如果我们更改t1的时间

在这里插入图片描述

如上图 t3的时间也会被修改 而t2的时间不受影响

enum和set

enunm

语法:

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

enum(‘选项1’,‘选项2’,‘选项3’,…);

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

实例

比如说我们建立一张表 表中有枚举类型的数据性别

在这里插入图片描述

当我们像表中插入数据的时候可以选择性别为男或者女如果填写其他则会报错

在这里插入图片描述

而枚举的数据在实际的存储中是按照数字存储的并且是从1开始

所以说1代表男 2代表女 输入其他数字则插入失败

在这里插入图片描述

set

语法

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

set(‘选项值1’,‘选项值2’,‘选项值3’, …);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率
考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,…
最多64个。

不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。

set的数字表示使用的是二进制的形式 如下图

在这里插入图片描述

1代表有这个爱好 而0代表没有这个爱好 上图中的111就代表有这三个爱好 而111的二进制数字转化为十进制后是7

实例

我们在上面的表中加入一个爱好选项

在这里插入图片描述

插入数据的时候就可以使用数字或者是文字插入爱好了

在这里插入图片描述

如何查询爱好

  1. 我们可以通过等于号查询

在这里插入图片描述

但是我们这里发现使用等于号查询只能查询出爱好中只有游泳的人而不能查询出爱好中有游泳的人

于是这里就有第二种查询方式

  1. 集合查询使用find_ in_ set函数:

语法:

find_in_set(sub,str_list)

参数说明:

  • sub为我们要查询的字符串
  • str_list为我们要查询的列表 一般为属性名

此时我们要查询爱好中带有游泳的人就可以这么查询了

在这里插入图片描述

总结

在这里插入图片描述

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

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

相关文章

办公难题轻松解决!快速实现文件夹多次复制,轻松节省办公时间

在日常办公中,我们经常遇到需要多次复制文件夹的情况,而繁琐的操作常常令人头疼。但现在,我们为您提供了一款简单易用且高效的解决方案,让您轻松应对复制文件夹的难题,节省宝贵的办公时间! 首先我们要进入…

Flask框架之RESTful--参数验证--add_argument方法参数详解

目录 参数验证 参数验证的重要性 Flask-RESTful 参数验证方法 基本用法 1. 使用 reqparse 模块 示例 代码详解 2. 使用 marshmallow 库 示例 代码详解 add_argument方法参数详解 名词解释 代码案例 参数验证 参数验证也叫参数解析 Flask-Restful插件提供了类似W…

Win10任务栏 图标居中

参考:图标居中 1.右键任务栏,将锁定任务栏取消。 2.右键选择工具栏,然后选择新建工具栏。 3.选择一个空的文件夹。 4.将开始菜单旁边的两条线拖到新建工具栏的后面。 5.将图标拉到中间。 6.在新建工具栏的标题上右键,将显示标题取消选择…

cmake流程控制---cmake数学计算操作和if命令

目录 cmake 数学计算操作 demo if命令 基本表达式 逻辑表达式(NOT AND OR) 比较表达式 正则表达式 demo 文件系统相关 判断是否存在的表达式 cmake 数学计算操作 有时候我们需要对cmake变量之间进行数学运算,这时候cmake提供了math()这个命令,命令格式如下: math(…

黑苹果网络经常掉线/无线网卡无法驱动解决办法(itlwm)

适用问题 黑苹果3-5分钟掉一次网,网卡无法驱动(右上角WLAN图标变灰有斜杠) 作者环境 作者笔记本因为Intel网卡太旧且系统支持不稳定,所以经常掉网 在Github上有一款驱动(Airport)itlwm,经OC注入后网络状态稳定 安装方法(OC) 下载 建议在…

阿里云服务器扩容记录

先在控制台选择云盘扩容,然后才能在服务器操作: blkidlsblk -n df -Thapt-get updatetype growpart || apt-get install -y cloud-guest-utilstype sgdisk || apt-get install -y gdiskLC_ALLen_US.UTF-8 growpart /dev/vda 3 resize2fs /dev/vda3

Element+Vue+OpenLayers的项目实战

WebGIS ElementVueOpenLayers的项目实战 使用npm配置开发环境Vue的安装npm安装vue-cli脚手架构建工具安装桥接工具运行项目 使用npm配置开发环境 开发是项目级别的,则需要使用npm来配置开发环境; 使用npm配置开发环境主要包括Vue、Element和OpenLayers的…

PyQt如何查找帮助信息(不会写组件的代码,快看过来!)

1.可以在PyQt6官网中查找信息kReference Guide — PyQt Documentation v6.5.1 看不懂没有关系啦,可以使用网页翻译哒~ 找到或者直接搜索QLabel,寻找对应函数即可 2. https://zetcode.com/pyqt6/ 3.Qt Creator中寻找 例如,输入setText 就可以…

BC 汇率读取问题

今天发现一个奇怪的问题,读去汇率,A账户汇率正常读取,B账户能读取到记录,并且ABAP判断不是初始,但是里面的实际数据都是0 。发现是权限的问题 sm30 经过测试 是以上的权限对象的问题 解决思路 权限对象配起来

如何通过浏览器配置哪些网页不走代理服务器,Lantern开启后部分网页打不开了

浏览器点设置 > 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器” 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器”,将不用代理的url链接域名写进来,点击保存。然后刷新打不开的网页,…

Elasticsearch + Kibana+Docker实现词云

需求 实现文件导入es,支持格式TXT、DOC、PPT、XLS、PDF、图片ik分词器远程热更新自定义扩展字典和停用字典Kibana配置词云,并显示对应文档详情和字典频次,且自定义显示字典 技术点 文件导入:es插件ingest-attachment图片文字识…

QT day1简单登录界面

widget.cpp文件代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {qDebug()<<this->size();qDebug()<<this->frameSize();this->setFixedSize(50…

Element Plus el-table 自定义合并行和列

原文链接&#xff1a;Element Plus el-table 自定义合并行和列 前言 目标效果是将表格行数据中某个属性值相同的项合并到一起&#xff0c;效果如下&#xff1a; <el-table :data"tableData" :span-method"spanMethod" style"width: 100%">…

[桌面运维] 显示器 色准,色域,色深,分辨率,带宽,刷新率的基本概念,图像呈现的基本原理

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

数字创新 融合发展 2023中国国际数字和软件大会在大连开幕

作为数字和软件服务产业一年一度的行业盛宴&#xff0c;为期四天的2023年中国国际数字和软件服务交易会&#xff08;以下简称“数交会”&#xff09;&#xff0c;于7月6日在大连正式拉开帷幕。 本届数交会由商务部、科技部、中国国际贸易促进委员会、辽宁省人民政府主办&#x…

抖音seo矩阵系统源代码分享--开发者

一、技术开发注意事项&#xff1a; 目录 一、技术开发注意事项&#xff1a; 二、抖音SEO账号矩阵系统源码思路 三、抖音SEO底层开发逻辑主要包括以下几个方面&#xff1a; 四、 功能规划 五、 代码开发展示 确定业务需求&#xff1a;在开发前&#xff0c;需要明确抖音矩阵…

游泳耳机哪款好,列举几款不错的游泳耳机

在接下来的日子可以说每个地方的天气都陆续的进入了夏天&#xff0c;而在炎热的夏天里&#xff0c;很多人都会选择通过游泳&#xff0c;在水下感受凉爽的同时起到了不错的放松效果&#xff0c;但对于新手而言有一些游泳好物还不知道该如何挑选&#xff0c;今天我就来给大家分享…

写一个starter(spring boot)

前置知识 自动装配 自动装配的一个重要注解就是SpringBootApplication。它是一个复合注解&#xff0c;由四个元注解和另外三个注解组成。这三个注解是&#xff1a; ConfigurationEnableAutoConfigurationComponentScan Configuration Configuration 是 JavaConfig 形式的…

红黑树做中文字符输入法,你懂了不?

前言 输入一个字符&#xff0c;匹配中文字符的输入法&#xff0c; 例如输入a&#xff0c;输出&#xff1a;啊阿&#xff0c;然后再输入n&#xff0c;即变成an&#xff0c;输出&#xff1a;鞍氨安俺按暗岸胺案&#xff0c; 要求要有搜索的接口&#xff0c;应该如何设计呢&#…

【JY】这个房子应该做抗震or减隔震?

一个问题的引出 有一个有趣的问题&#xff0c;你家如果在处于地震带高烈度地区的村子里有一块地可盖房子&#xff0c;你会用什么技术建造呢&#xff1f;&#xff08;村镇建筑建造~&#xff09; 抗震 or 减隔震&#xff1f; 正文 对于这个问题&#xff0c;呼声最高的是隔震技术…