《MySQL数据类型》

news2024/9/25 13:17:29

文章目录

  • 一、理解数据本身就是一种约束
    • 1.tinyint类型和 tinyint unsigned类型
    • 2.其他的int类型
  • 二、bit类型
  • 三、float类型
    • 1.signed版本
    • 注意
    • 2.unsigned版本
  • 四、decimal类型
  • float 和 decimal 总结
  • 五、char类型(固定长度)
  • 六、varchar类型(可变长度)
    • 总结
  • char和varchar比较
  • 七、日期和时间类型
  • 八、enum和set类型
    • enum
    • set
    • 总结
    • enum和set的类型查找


一、理解数据本身就是一种约束

1.tinyint类型和 tinyint unsigned类型

在这里插入图片描述
先创建表t1

create table if not exises t1(
num tinyint
);
表中只有一个字段tinyint
在这里插入图片描述

向num字段中添加数据:

insert into t1 values(-1);

在这里插入图片描述

然而,当我们插入256时:

在这里插入图片描述
出现了错误
意味着数据库不允许我们插入不合法数据。
反之,插入的一定是合法的数据!!!

所以一般而言,数据本身就是一种约束!!!

约束程序员,尽可能正确地插入数据。
就算你不是一个很好的程序员,Mysql也能保证数据的合法性。

2.其他的int类型

在这里插入图片描述

二、bit类型

创建一个表时,如下:
在这里插入图片描述
向表中插入一些数据后,如下:

在这里插入图片描述
问题是:为什么online字段没有任何显示呢?

只需执行如下命令就能显示了:

select id , hex(online) from t1;
(以十进制的方式显示)

在这里插入图片描述

同时也可以修改online字段的大小:

alter table t1 modify online bit(10);
在这里插入图片描述

三、float类型

1.signed版本

在这里插入图片描述
比如salary float(4,2);

表示允许承装的最多位数是4位(总长度,包含整数部分和小数部分),小数点后最多占两位。

那插入的salary(工资)最大就是:99.99

由于在建表时,salary类型没有设置成unsigned类型,所以可以插入负数,但实际生活中没有负数的工资吧。。。

注意

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

比如要插入一个数:

insert into t2(id ,salary) values(1,99,991);

是会插入成功的,因为在小数点部分,会进行四舍五入,将1舍去。
但是当插入下面的数据时,就不行:

insert into t2(id, slary) values(2,99.996);

因为一旦最后一个小数位进位后,数据就超出了-99.99~99.99的范围。

2.unsigned版本

如果把float设置成unsigned版本,那么取值范围就相当于把负数部分直接丢掉。

比如:定义一个表时,把float设置成float(4,2) unsigned

那取值范围就是:0~99.99

总结:1.一般情况下,默认的float,不指定位数的情况下,可容纳数据位数是比较大的,跟不同的平台设计也有关。
2.有一些情况,存储的浮点数类型比较大时,会出现精度丢失的问题。
在这里插入图片描述

四、decimal类型

该decimal类型,与float类型基本一样,区别在于decimal能更精确控制浮点数,确保不会丢失。

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

float 和 decimal 总结

说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。
建议:如果希望小数的精度高,推荐使用decimal。

五、char类型(固定长度)

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

比如:name char(2),表示放的最大长度的字符串是2;

注意:在MySQL中,一个汉字表示一个字符!
在这里插入图片描述

六、varchar类型(可变长度)

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

在修改varchar的最大类型的长度时,发现最大字符长度是 21845,
这个是字符的长度,由于采用utf8编码,一个字符3个字节。

21845*3 = 65535

在这里插入图片描述

总结

但是,当我修改到21845时,同样不可以。

原因是:varchar(6),表示的是字符的使用上限是6,而不是一次固定分配6个字符大小的空间。

当只使用1个字符的空间时,varchar实际上只会分配一个字符大小的空间。所以,就需要有1~3个字节位,来记录所使用的空间有多少。
而char类型不同,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字节)。

char和varchar比较

在这里插入图片描述

在这里插入图片描述

七、日期和时间类型

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

创建一个表,如下:

create table if not exists t7(
-> d date,
-> dt datetime,
-> ts timestamp
-> );

首先插入一个数据:
在这里插入图片描述
时间戳timestamp就是当前的最新时间。

然后,修改d,如下:
在这里插入图片描述
发现时间戳ts改变了,变成了最新的时间。

时间戳(timestamp)存在的意义:
实际生活中的社交软件,视频下面会有评论,当一个人发表评论时,会被所有人看到,并且附带发表评论时的时间。

过了几个月,当这个人修改它发表过的评论时,时间会自动更新成当前时间!
这就能让所有人知道,该评论何时被评论的,何时被修改的。

datetime存在的意义:
入职的时间,固定在那里,或者办理身份证的时间,固定在那个时间,什么日期,几时几分几秒,一般不会自动更新。

date存在的意义:
比如记录一个重要的人的生日,比如你自己的生日。

八、enum和set类型

enum

enum类型:枚举
在插入时,可以直接插入枚举类型定义的常量,也可以直接插入枚举常量的下标。(这里的下标从1开始)

比如:创建一个表如下:

create table if not exists t8(
-> name varchar(30),
-> gender enum(‘男’,‘女’),
-> hobby set(‘代码’,‘羽毛球’,‘乒乓球’,‘足球’,‘游泳’)
-> );

可以这样插入:

  • insert into t8 values(‘张飞’,‘男’,‘代码’);

还可以这样插入:

  • insert into t8 values(‘孙权’,1,‘代码’);

结果如下:1就代表枚举常量中的下标,在此1表示男,2表示女。
在这里插入图片描述

set

set的选择可以按照位图来。

以上面的表为例,

hobby set(‘代码’,‘羽毛球’,‘乒乓球’,‘足球’,‘游泳’)

一共有五个爱好,那么位图就有5个比特位,为1时表示选择该爱好。

所以可以这样插入数据:

  • insert into t8 values(‘孙权’,1,31);
    31的二进制就是:11111,就会让上面set位图的5个比特位全部置1。
    如果是这样插入:
    insert into t8 values(‘孙权’,1,7);
    7的二进制是:00111,代表将前3个比特位置1。
    而前三位就是set的从左到右开始计算的。
    所以爱好为:‘代码’,‘羽毛球’,‘乒乓球’。

总结

enum用数字来插入时,指代下标。
set用数字来插入时,指代位图,set的从左到右代表从小到大。

enum和set的类型查找

法1:

select * from votes where gender=1;
select * from votes where gender=‘男’;
上面两种写法等价。

根据特定的类型查找,比如按性别查找。

法2:
find_in_set 函数

select find_in_set(‘a’,‘a,b,c’);

  • 1.find_in_set 函数是查找一个元素是否在集合里面。
  • 2.判断一个元素是否在集合中,而不是判断是否严格相等。

所以,查找hobby是否有羽毛球时,是判断羽毛球是否在每一个用户中的。
在这里插入图片描述

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

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

相关文章

T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)

T型槽地轨承载力的定义和计算 T型槽地轨是一种用于工业设备运输和装配的关键组件。它由世界上各行各业的生产商广泛采用,其有效的承载力使其成为连接整个制造过程的强力桥梁。本文将介绍T型槽地轨的承载力以及相关的设计要点和应用。 承载力的定义和计算 承载力是…

IDEA--debug

1. 单点调试的三个级别 Step into:在单步执行时,遇到子函数就进入并且继续单步执行。Step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数…

商品期权交易怎么操作?

今天期权懂带你了解商品期权交易怎么操作?作为金融市场中的一种重要衍生品,商品期权在风险管理、套期保值和投机交易中发挥着重要的作用。 商品期权交易怎么操作? 选择期权合约:根据市场分析结果,选择合适的期权合约进…

什么是HTTPS证书?怎么免费申请?——值得收藏

SSL证书的核心功能在于保障互联网数据传输的安全性和网站身份的可靠性。它通过加密通信防止信息被窃取或篡改,同时验证网站的真实身份,有效抵御钓鱼攻击,增强用户信任。此外,使用SSL证书还有助于提升网站在搜索引擎中的排名&#…

上线了《學點笔录》,更方便翻阅笔录

大家好,我是学点,整理了一下自己笔记、摘要、记录《學點笔录》并且上线了为更方便翻阅 https://code.yellowcan.cn 欢迎来我的學點笔录网站!笔录会关于与编程有关,比如bug记录、bug解决过程、编程笔记等等,帮助回忆阅…

通过七析BI自定义组件实现3D效果图表渲染

关于可视化的一些概念已经在之前的文章进行了大概的介绍,接下来我们会更加深入探讨关于呈现效果的内容。 为什么要用3D图表在仪表盘中进行呈现? 当讨论到这个问题的时候,自然就会回归到一个核心:3D与2D的呈现效果有什么区别&#…

Find My无线麦|苹果Find My技术与无线麦结合,智能防丢,全球定位

无线麦采用数字信号处理技术,能够实现高质量的录音效果。同时,其采用多种降噪技术,能够更好地降低底噪和环境噪声,提供更好的音质。无线麦在直播中的作用不仅仅是提供高质量的录音效果,它还能够增强直播的效果,提升听众的观感和体…

什么牌子的充电宝质量好且耐用?精选四款性价比高充电宝

对于我这种只要有空,手机基本是不离手的,从早到晚都是离不开手机,点外卖需要用到手机,看剧需要用到手机,反正各种活动都是离不开手机,但是手机总会有没电的时候,这时候要么是找个插座充电&#…

DEM(高程)数据下载及计算可见性

数据下载 下载链接: 地理空间数据云 (gscloud.cn) 数据部分介绍 ASTER是美国宇航局Terra航天器(1999年发射)上的五台仪器之一,在日本为经济产业省(METI)建造。美国/日本联合科学团队负责仪器设计、校准和数据验证。 高级星载热发射和反射辐射计(ASTER)全球数字高程…

社交媒体数据恢复:哔哩哔哩

哔哩哔哩数据恢复的方法 在哔哩哔哩平台上,数据恢复的过程可能会因为数据丢失的原因不同而有所差异。以下是根据搜索结果总结的几种常见数据恢复方法: 1. 误删历史记录的恢复 如果你不小心误删了哔哩哔哩的历史记录,那么很抱歉&#xff0c…

【Linux系统化学习】网络套接字(编写简单的UDP服务端和客户端)

目录 理解源IP地址和目的IP地址 认识端口号 端口号和进程ID的区别 源端口号和目的端口号 认识TCP和UDP协议 TCP协议 UDP协议 网络字节序 socket编程接口 socket常见API sockaddr结构 简单的UDP网络程序 UDP服务端 创建套接字 填充本地网络信息 绑定 收取消息 …

打造亚马逊爆款秘诀:流量、排名与自养号测评的完美结合

亚马逊是一个产品为王的平台,只要我们的产品好,就会有更多的流量,有流量还怕我们的产品卖不出去?身为新手我们店无流量该怎么办,今天教给你们五个获取流量的方法。 1.自然检索 那是我们常说的自然流量,通…

spring中的bean是线程安全的嘛

在Spring框架中,bean默认情况下不是线程安全的。Spring容器在初始化bean时,会为其创建一个单例实例,这个实例在整个应用中是唯一的,并且只会被初始化一次。由于这个特性,bean在默认情况下不是线程安全的。 然而&#…

在Ubuntu上安装docker

一、安装docker 更新系统包列表: sudo apt-get update安装必要的依赖软件包,使apt可以通过HTTPS使用repository。 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common添加Docker的阿里云GPG密钥:…

WP Rocket插件下载:加速您的WordPress网站,提升用户体验

在互联网速度决定用户体验的今天,一个快速加载的网站对于吸引和保留访问者至关重要。WP Rocket插件,作为一款专为WordPress设计的高性能缓存插件,提供了一套完整的解决方案,帮助您优化网站性能,提升用户体验。 [WP Ro…

Begin 版本:2023/01/11 知更鸟WordPress主题优化版

主题下载地址:Begin主题优化版.zip 适用于博客、新闻、公司、图片、小说、文档、商城、资源下载、网址导航等多种类型网站

Redis 实战之客户端属性

客户端属性 套接字描述符名字标志输入缓冲区命令与命令参数命令的实现函数输出缓冲区身份验证时间总结 客户端状态包含的属性可以分为两类: 一类是比较通用的属性, 这些属性很少与特定功能相关, 无论客户端执行的是什么工作, 它们…

(二十一)springboot实战——Spring AI劲爆来袭

前言 本节内容是关于Spring生态新发布的Spring AI的介绍,Spring AI 是一个面向人工智能工程的应用框架。其目标是将 Spring 生态系统的设计原则,如可移植性和模块化设计,应用到人工智能领域,并推广使用普通的Java对象&#xff08…

DSN Injection(CVE-2022-3023)

DSN DSN通常指数据源名称(Data Source Name),它被用于存储数据库连接信息,如数据库服务器的地址、数据库名、用户名以及密码等,以便软件能够利用这些信息连接到数据库。 DSN Injection DSN注入(DSN Injecti…

Web安全:SQL注入漏洞详解,SQL注入常见功能、危害、分类、判断注入点、注入方式

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等…