MySQL数据类型

文章目录

  • MySQL数据类型
    • 1. 数据类型分类
    • 2. 数值类型
      • 2.1 tinyint类型
      • 2.2 bit类型
      • 2.3 小数类型
        • 2.3.1 float
        • 2.3.2 decimal
      • 2.4 字符串类型
        • 2.4.1 char
        • 2.4.2 varchar
        • 2.4.3 char和varchar比较
      • 2.5 日期和时间类型
      • 2.6 enum和set

MySQL数据类型

1. 数据类型分类

红色标注是我主要讲解的内容

在这里插入图片描述

2. 数值类型

在这里插入图片描述

2.1 tinyint类型

tinyint有符号数据范围测试:

首先创建一个数据库,进入

在这里插入图片描述

进入后,创建一张表,表当中包含一个tinyint类型的列,默认其为有符号类型

注意: 在MySQL表中建立属性列,列名称在前,属性在后

列名称, 属性

在这里插入图片描述

由于tinyint的取值范围是-128~127, 边界和范围内的数据可以插入

在这里插入图片描述

在此范围之外的数据无法插入

在这里插入图片描述

说明:

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

tinyint无符号数据范围测试:

创建t2表,并且指定为无符号类型

在这里插入图片描述

无符号tinyint范围是0~255,一旦越界则无法插入

在这里插入图片描述

注意:

  • 我们平时在语言上赋值超过范围时(比如 char a =1234567),可能会发生截断后赋值,但是我们向MySQL特定的类型中插入不合法的数据,MySQL一般都是直接拦截我们,不让我们做对应的操作!

  • 反过来,如果MySQL我们已经有数据被成功插入到MySQL中了,一定在插入的时候是合法的!

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

  • 这样做的目的是: 倒逼程序员,让程序员尽可能进行正确的插入,约束的是: 使用者,另外若果你不是一个很好的使用者,MySQL也能保证数据插入的合法性;进而就能数据库中的数据是可预期,完整的

2.2 bit类型

基本语法

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

先创建一张表,表当中包含一个int类型和bit类型的列

在这里插入图片描述

bit是一种位类型,一个bit位只允许插入0或1,并且超过位数的值是无法插入的

在这里插入图片描述

直接查看发现是不显示的,因为bit类型在显示时,是按照ASCII码对应的值进行显示的,有些字符是不可显示的

在这里插入图片描述

强转成16进制显示

在这里插入图片描述

修改表,改成 bit(10)

在这里插入图片描述

向表中插入’a’和97,最后显示都是’a’,再次验证了是按ASCII码对应的值进行存储

在这里插入图片描述

bit(M),如果超过M最大值64,创建表就会失败

在这里插入图片描述

直接创建表,不指定bit中M的长度,默认值是1

在这里插入图片描述

2.3 小数类型

2.3.1 float

语法:

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

创建一个表,包含一个float(4,2)类型的列,默认其为有符号类型

在这里插入图片描述

float(4,2)表示的范围是-99.99 ~ 99.99,在该范围内可以插入数据,超过范围报错

在这里插入图片描述

在这里插入图片描述

尝试插入一些,超过小数位数的值,下面会成功插入,因为这些四舍五入后会变成99.99

在这里插入图片描述

而这些无法插入,因为四舍五入后会变成100.00超过了范围

在这里插入图片描述

说明:MySQL在插入值时会进行四舍五入

创建一个无符号的表,还是一样的列属性

在这里插入图片描述

向其中中插入一些数据,发现负数和超过范围的数据是无法插入的

在这里插入图片描述

说明: 无符号类型的float取值范围是0~99.99

在这里插入图片描述

还有一个问题要注意,float类型会精度丢失问题

在这里插入图片描述

2.3.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,长度和小数点位数都相同,向两列中插入同样高精度的值,float则会存在一定的精度损失,decimal则没有

在这里插入图片描述

说明:float表示的精度大约是7位。

  • decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。

建议:如果希望小数的精度高,推荐使用decimal

2.4 字符串类型

2.4.1 char

语法:

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
  • L代表一个字符,在MySQL里一个汉字也是一个字符

  • 在不同编码中,一个字符所占的字节个数是不同的,比如utf8中一个字符占3个字节,而gbk中一个字符占2个字节

先创建一张表

在这里插入图片描述

向其中插入一些字符,一旦字符数超过固定的长度则不会插入

在这里插入图片描述

也可插入汉字

在这里插入图片描述

2.4.2 varchar

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

L代表字节

先创建表

在这里插入图片描述

插入数据,varchar在这与char没什么区别

在这里插入图片描述

说明:
关于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字节)。

在这里插入图片描述

2.4.3 char和varchar比较

在这里插入图片描述

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

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

2.5 日期和时间类型

常用的日期有如下三个:

  • date :日期’yyyy-mm-dd’ ,占用三字节
  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从10009999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和datetime 完全一致,占用四字节

先创建一张包含着3个类型的数据表

在这里插入图片描述

查看表的具体属性

在这里插入图片描述

如果向表中插入数据,t3会自动更新到最新时间(无需手动插入)

在这里插入图片描述

修改一下t1的时间,同时发现t3时间也更新了

在这里插入图片描述

那么t3这种字段究竟有什么用呢?

假设一种场景,现在有一个论坛,大家在里评论,t3会记录某人最新评论的时间

我们创建这样一个表,两列属性分别代表用户的评论内容和评论时间

在这里插入图片描述

现在我发表了评论,t3记录了我当前的时间

在这里插入图片描述

过了一会,我又重新发表了评论,则t3会更新,记录我最新发表评论的时间

在这里插入图片描述

2.6 enum和set

语法:

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

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

  • set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...);

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

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

创建表,分别设置列数据类型为enum和set

在这里插入图片描述

以选择属性的形式插入性别和爱好,在范围内可成功插入

在这里插入图片描述

以数字的形式插入性别,枚举是从1开始的,则1代表’男’, 2代表’女’, 在这两个之外的数无法插入

在这里插入图片描述

以选择属性的形式插入爱好,在范围内可成功插入,如有多组值可逗号隔开插入

在这里插入图片描述

如果只插入username这一个,则其他两个默认为NULL

在这里插入图片描述

set是一个位图结构,比特位的0/1代表有无,比如上面hobby中的选项就可以这样表示

在这里插入图片描述

hobby选项插入为0则代表空串,插入1就是将代码的比特位置1

在这里插入图片描述

将上面hobby选项全部置为1则为数字31,则插入31就代表插入所有选项

在这里插入图片描述

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

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

直接去筛选发现是一种精确匹配,会将属性只为羽毛球的显示

在这里插入图片描述

使用find_ in_ set函数,会将属性有羽毛球的显示

在这里插入图片描述

筛选出属性有羽毛球和代码的

在这里插入图片描述

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

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

相关文章

【QT】 QFileQFileInfo文件操作

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT对文件的操作技术,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享,一起进步! 你的点…

商城-学习整理-高级-全文检索-ES(九)

目录 一、ES简介1、网址2、基本概念1、Index(索引)2、Type(类型)3、Document(文档)4、倒排索引机制4.1 正向索引和倒排索引4.2 正向索引4.3 倒排索引 3、相关软件及下载地址3.1 Kibana简介3.2 logstash简介…

【C++深入浅出】初识C++上篇(关键字,命名空间,输入输出,缺省参数,函数重载)

目录 一. 前言 二. 什么是C 三. C关键字初探 四. 命名空间 4.1 为什么要引入命名空间 4.2 命名空间的定义 4.3 命名空间使用 五. C的输入输出 六. 缺省参数 6.1 缺省参数的概念 6.2 缺省参数的分类 七. 函数重载 7.1 函数重载的概念 7.2 函数重载的条件 7.3 C支…

软件测试项目实战,电商业务功能测试点汇总(全覆盖)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 支付功能怎么测试…

C语言刷题训练【第11天】

大家好,我是纪宁。 今天是C语言笔试刷题训练的第11天,加油! 文章目录 1、声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( )2、关于代码的说法正确的是( )3、已知有如下各变…

使用 Visual Studio GoogleTest编写 C/C++ 单元测试——入门篇

入门教程 Visual Studio 新建 GoogleTest项目,一路选默认参数 pch.h #pragma once#include "gtest/gtest.h"int add(int a, int b);pch.cpp #include "pch.h"int add(int a, int b) {return a b; }test.cpp #include "pch.h"TES…

【广州华锐视点】AR电力职业技能培训系统让技能学习更“智慧”

随着科技的发展,教育方式也在不断地进步和创新。其中,增强现实(AR)技术的出现,为教育领域带来了全新的可能。AR电力职业技能培训系统就是这种创新教学方法的完美实践,它将虚拟与现实相结合,为学生提供了一个沉浸式的学…

【数据库】Sql Server可视化工具SSMS条件和SQL窗格以及版本信息

2023年,第34周,第1篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! SQL SERVER 官方本身就有数据库可视化管理工具SSMS,所以大部分都会使用SSMS。以前版本是直接捆绑, 安装完成就自带有…

Python多线程与线程池(python线程池ThreadPoolExecutor)concurrent.futures高级别异步执行封装

文章目录 Python多线程与线程池一、Python多线程1.1 线程简介1.2 Python中的多线程1.3 GIL限制 二、线程池2.1 Python中的线程池 三、代码分析四、参考资料 Python多线程与线程池 一、Python多线程 在进行复杂的计算或处理大量数据时,可以通过创建多个线程来同时执…

Sentinel规则持久化

首先 Sentinel 控制台通过 API 将规则推送至客户端并更新到内存中,接着注册的写数据源会将新的规则保存到本地的文件中。 示例代码: 1.编写处理类 //规则持久化 public class FilePersistence implements InitFunc {Value("spring.application:n…

云原生k8s---资源限制、探针

目录 一:资源限制 1、资源限制原因 2、Pod 和 容器 的资源请求和限制 3、CPU 资源单位 4、内存 资源单位 5、事例 (1)事例一 (2)事例二 二:重启策略 1、重启策略模式 2、事例 三:探针…

Win10提醒事项如何打开?电脑上如何添加日程提醒?

有不少上班族表示自己在日常办公时,经常会忘记一些重要的事情,例如领导安排给自己的任务、会议安排、项目截止日期等。为了避免自己忘记工作事项,很多人都想要在电脑上设置提醒事项或添加日程提醒。那么Win10提醒事项如何打开呢?P…

[Leetcode] [Tutorial] 多维动态规划(未完待续)

文章目录 62. 不同路径Solution 62. 不同路径 一个机器人位于一个 m ∗ * ∗ n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。 问总共有多少条不同的路径? 示例…

【electron】electron项目创建的方式:

文章目录 【1】npm init quick-start/electron(推荐)【2】 克隆仓库,快速启动【3】 通过脚手架搭建项目【4】 手动创建项目 【Electron官网】https://www.electronjs.org/zh/docs/latest/api/app 【1】npm init quick-start/electron&#xf…

Excelize Go语言操作 Office Excel文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

微信小程序实现左滑删除

一、效果 二、代码 实现思路使用的是官方提供的 movable-area:注意点,需要设置其高度,否则会出现列表内容重叠的现象。由于movable-view需要向右移动,左滑的时候给删除控件展示的空间,故 movable-area 需要左移 left:…

sqlloader学习笔记

INFILE的用法 1)模糊导入多个数据的文件。 可以在文件名中使用通配符。 星号 (*) 表示复数字符,问号 (?) 表示单个字符。 INFILE emp*.dat INFILE m?emp.dat 2)如果不需要导入数据…

jQuery EasyUI datagrid 无记录时,增加“暂无数据“提示

我们只需要在onLoadSuccess中添加如下代码&#xff1a; if (data.total 0) {var body $(this).data().datagrid.dc.body2;body.find(table tbody).append(<tr><td width" body.width() " style"height: 35px; text-align: center;"><h…

上传excel文件

文件上传&#xff0c;其实就是用el-upload组件来实现上传&#xff0c;只是换了样式&#xff0c;和图片上传一样 <el-form-item label"选择文件"><el-input placeholder"请选择文件" v-model"form.file" disabled style"width: 45…

java 使用log4j显示到界面和文件 并格式化

1.下载log4j jar包https://dlcdn.apache.org/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.zip 2. 我只要到核心包 &#xff0c;看需要 sources是源码包&#xff0c;可以看到说明。在IDEA里先加入class jar后&#xff0c;再双击这个class jar包或或右键选Navigate ,Add ,…