MySQL --数据类型

文章目录

  • 1.数据类型分类
  • 2.数值类型
    • 2.1 tinyint类型
    • 2.2 bit类型
    • 2.3小数类型
      • 2.31float
      • 2.32decimal
  • 3.字符串类型
    • 3.1 char
    • 3.2varchar
    • 3.3 char和varchar比较
  • 4.日期和时间类型
  • 5.enum和set

1.数据类型分类

在这里插入图片描述

2.数值类型

在这里插入图片描述

2.1 tinyint类型

数值越界测试:

create table tt1(num tinyint);insert into tt1 values(1);insert into tt1 values(128);select * from tt1;

在这里插入图片描述
可以看到,当插入的数据越界时,直接报错,插入失败。

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

 create table tt2(num tinyint unsigned);insert into tt2 values(-1);insert into tt2 values(255);select * from tt2;

在这里插入图片描述

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

2.2 bit类型

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

示例:

create table tt4 ( id int, a bit(8));
insert into tt4 values(10, 10);
select * from tt4;

在这里插入图片描述
这里bit类型是按照十六进制来显示的,但数据仍然是以二进制位的形式存储的,只是在显示时进行了转换。
可以使用MySQL的BIN()函数。这个函数会将BIT类型的值转换为二进制字符串表示。
在这里插入图片描述

2.3小数类型

2.31float

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

示例:

 create table tt6(id int, salary float(4,2));insert into tt6 values(100, -99.99);insert into tt6 values(101, -99.991);select * from tt6;

在这里插入图片描述
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99

create table tt7(id int, salary float(4,2) unsigned);
insert into tt7 values(100, -0.1);show warnings;insert into tt7 values(100, -0);insert into tt7 values(100, 99.99);select * from tt7;

在这里插入图片描述
这里也是超出范围的数据会直接报错,不会被插入进去。

2.32decimal

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

decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别:
float和decimal表示的精度不一样

 create table tt8 ( id int, salary float(10,8), salary2
decimal(10,8));
insert into tt8 values(100,23.12345612, 23.12345612);
select * from tt8;

在这里插入图片描述

在这里插入图片描述
说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。

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

3.字符串类型

3.1 char

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

示例:

 create table tt9(id int, name char(2));insert tt9 values(100,'ab');insert tt9 values(101,'莲华');select * from tt9;

在这里插入图片描述
说明:
char(n) 表示可以存放两个字符,可以是字母或汉字,但是不能超过n个, 最多只能是255。

create table tt10(id int ,name char(256));

在这里插入图片描述
256时创建失败。

3.2varchar

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

示例:

create table tt10(id int ,name varchar(6));
insert into tt10 values(100, 'hello');
insert into tt10 values(100, 'hi,gsfl');
select * from tt10;

在这里插入图片描述
说明:
关于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字节)。

 create table tt11(name varchar(21845))charset=utf8;
create table tt11(name varchar(21844)) charset=utf8;

在这里插入图片描述
上面的结果验证了utf8不能超过21844

3.3 char和varchar比较

在这里插入图片描述
如何选择定长或变长字符串?

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

4.日期和时间类型

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

示例:

create table birthday(t1 date, t2 datetime,t3 timestamp);
insert birthday(t1,t2) values('1977-7-7','2008-8-8 12:1:1');
select * from birthday;

在这里插入图片描述
一般时间戳不输入值时(这里的t3)会自动补上当前时间,更新数据时也会更新当前时间。
这里因为MySQL版本问题,在MySQL 8.0及更高版本中,explicit_defaults_for_timestamp系统变量的默认值从OFF变为了ON。这可能导致某些行为上的变化,尤其是在处理TIMESTAMP类型的自动初始化和更新时。
在这里插入图片描述

SET GLOBAL explicit_defaults_for_timestamp = OFF;

可以尝试修改再重启后试试

5.enum和set

语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);

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

set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);

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

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

示例:

create table votes(
username varchar(30),
hobby set('登山','武术','游泳','游戏','跑步','小说'),
gender enum('男','女'));insert into votes values('小明', '登山,武术', '男');
insert into votes values('Juse','登山,武术',2);
select * from votes where gender=2;

在这里插入图片描述
查找喜欢登山的人:

select * from votes where hobby='登山';

在这里插入图片描述
这个方法不能查询出所有爱好为登山的人。

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

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

select find_in_set('a', 'a,b,c');
select find_in_set('d', 'a,b,c');

在这里插入图片描述
查询爱好登山的人:

select * from votes where find_in_set('登山', hobby);

在这里插入图片描述

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

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

相关文章

ubuntu内网穿透后在公网使用ssh登录

需求: 我有一台内网可以通过ssh 22端口访问的设备操作系统是ubuntu server我还有1台拥有公网IP的服务器,IP地址是 6.66.666.6666我想随时从其他网段通过ssh访问我的ubuntu server设备 实现: 工具准备:frp 网址:https…

Spring源码学习:SpringMVC(3)mvcannotation-driven标签解析【RequestMappingHandlerMapping生成】

目录 前言mvc:annotation-driven标签概述mvc:annotation-driven标签解析【RequestMappingHandlerMapping生成】AnnotationDrivenBeanDefinitionParser#parse (解析入口)RequestMappingHandlerMapping的实例化类图afterPropertiesSetAbstractHandlerMetho…

MySQL数据库——索引

目录 什么是索引(Index)? 怎样加索引? 索引的特点 索引类型 主键索引(Primary Key) 辅助索引(二级索引) 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…

mac Wireshark You do not have permission to capture on device “rvio“.

原因: 权限不足 解决方案: 打开终端在终端输入 whoamin (会在终端显示本机的实际用户名字) 例如:xiaoming进入 /dev 目录 cd /dev输入命令:ls -la | grep bp输入命令:sudo chown whoamin xiaoming:admin bp*重新打开 …

Python(五)-函数

目录 函数的定义与调用 特点 语法格式 函数的参数 函数的返回值 函数嵌套调用 变量的作用域 局部变量 全局变量 函数的多种参数 位置参数 关键字参数 默认参数 可变参数 函数的定义与调用 python函数需要使用def关键字来定义,需要先定义,后调用 特点: 先定义…

【数据结构与算法】LeetCode:二分查找

文章目录 二分查找二分查找搜索插入位置 (Hot 100)x 的平方根搜索二维矩阵(Hot 100)在排序数组中查找元素的第一个和最后一个位置 (Hot 100)搜索旋转排序数组 (Hot 100)寻找旋转排序…

【Ubuntu】minicom安装、配置、使用以及退出

目录 1 安装 2 配置 3 使用 4 退出 minicom是一个串口通信的工具,以root权限登录系统,可用来与串口设备通信。 1 安装 sudo apt-get install minicom 2 配置 使用如下命令进入配置界面: sudo minicon -s 进入配置界面后,…

【STM32】 TCP/IP通信协议--LwIP介绍

一、前言 TCP/IP是干啥的?它跟SPI、IIC、CAN有什么区别?它如何实现stm32的通讯?如何去配置?为了搞懂这些问题,查询资料可解决如下疑问: 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

OCR Fusion: EasyOCR/Tesseract/PaddleOCR/TrOCR/GOT

文章目录 前言一、基类 OCRExecutorBase二、EasyOCR1.安装2.模型下载3.DEMO 三、Tesseract1.安装2.使用问题3.DEMO 四、PaddleOCR1.安装2.DEMO 五、PaddleOCR(PyTorch移植版)1.代码整理2.DEMO 六、TrOCR1.安装2.模型下载3.DEMO 七、GOT1.安装2.模型下载3…

TCP\IP标准与OSI标准

TCP/IP 模型和 OSI 模型都是用于描述网络体系结构的模型,但它们的设计理念和层次结构有所不同。TCP/IP 模型更注重实际实现,而 OSI 模型更注重抽象和标准化。 1. OSI 模型 (Open Systems Interconnection Model) OSI 模型是一个七层模型,从…

UFS 3.1架构简介

整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。下…

vue3实现打字机的效果,可以换行

之前看了很多文章,效果是实现了,就是没有自动换行的效果,参考了文章写了一个,先上个效果图,卡顿是因为模仿了卡顿的效果,还是很丝滑的 目录 效果图:代码如下 效果图: ![请添加图片描述](https://i-blog.csdnimg.cn/direct/d8ef33d83dd3441a87d6d033d9e7cafa.gif 代码如下 原…

Vue(16)——Vue3.3新特性

defineOptions 在 Vue 3.3 之前&#xff0c;如果需要在 <script setup> 中设置组件名&#xff0c;通常需要在额外的 <script> 标签中使用 Options API 进行配置。defineOptions 是 Vue 3.3 版本中引入的一个宏&#xff08;macro&#xff09;&#xff0c;它主要用于…

初识Linux以及Linux的基本命令

千呼万唤始出来&#xff0c;Linux系列的文章从今天起开始不定期更新&#xff0c;闲话少叙&#xff0c;我们直接进入正题 初识Linux 这一部分我不打算给大家讲Linux的发展史啥的&#xff0c;直接从系统方面开始介绍 首先&#xff0c;我们平时用win10或win11所看到的桌面以及各…

element ui中当el-dialog需要做全屏时,.fullscreen样式修改问题

element ui 饿了么UI中el-dialog样式修改问题 场景解决方法就是&#xff1a;去掉底部样式中的scoped,然后再进行页面级样式的更改即可。 场景 最近在使用element-ui时&#xff0c;使用到了弹窗组件&#xff1a; element-ui 官网链接地址&#xff1a; element-ui 官网链接地址…

基于springboot+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论&#xff0c;也能对账户进行在线充值…

数据集-目标检测系列-吸烟检测数据集 smoking cigarette >> DataBall

数据集-目标检测系列-吸烟检测数据集 smoking cigarette >> DataBall 数据集-目标检测系列-吸烟检测数据集 &#xff08;smoking cigarette&#xff09; 数据量&#xff1a;1W 数据项目地址&#xff1a; gitcode: https://gitcode.com/DataBall/DataBall-detections-…

双链表的插入删除遍历

双链表的插入操作 双链表的删除操作 双链表的遍历操作

mit6824-01-MapReduce详解

文章目录 MapReduce简述编程模型执行流程执行流程排序保证Combiner函数Master数据结构 容错性Worker故障Master故障 性能提升定制分区函数局部性执行缓慢的worker(slow workers) 常见问题总结回顾参考链接 MapReduce简述 MapReduce是一个在多台机器上并行计算大规模数据的软件架…

netty编程之实现websocket客户端并发送二进制消息

写在前面 源码。 本文看下netty如何实现websocket客户端并发送二进制消息。 ws的server端参考这篇文章。 1&#xff1a;正文 抽象类AbstractWebsocketClient定义了发送二进制数据的方法&#xff1a; public abstract class AbstractWebsocketClient implements Closeable {…