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.xdnf.cn/news/1542530.html

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

相关文章

Python画笔案例-056 绘制正方形金字塔

1、绘制正方形金字塔 通过 python 的turtle 库绘制 正方形金字塔,如下图: 2、实现代码 绘制正方形金字塔,以下为实现代码: """正方形金字塔.py """ import turtledef draw_square(length):for _ in

设计模式之组合模式例题

答案:C A 知识点:组合模式的意图:将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性

数据挖掘实战-基于SARIMA时间序列模型预测阿里巴巴股票数据趋势

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

android kotlin Extension扩展函数

1、新建一个kt文件&#xff1a; 2、代码&#xff1a; class User(var name:String)/**扩展函数**/ fun User.Print(){print("用户名 $name") }// 扩展函数 swap,调换不同位置的值 fun MutableList<Int>.swap(index1: Int, index2: Int) {val tmp this[index1…

新手必看:一步步教你绑定常见邮箱到第三方应用(如何绑定QQ、163、Hotmail、Gmail等邮箱)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 邮箱绑定 📒📫 QQ邮箱📫 163邮箱📫 Hotmail邮箱📫 Gmail邮箱📫 Yahoo邮箱📫 iCloud邮箱📫 其他邮箱⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经为绑定第三方邮箱而感到困惑?你不是一个人!许多人在尝试将QQ邮…

Linux进程概念1

前言 从这篇博客开始&#xff0c;后面我们主要讲xshell中Linux内容&#xff0c;C后续会继续补充一点 Linux基础内容我就不讲了&#xff0c;直接从进程开始讲 1. 进程是什么 像这种程序正在运行&#xff0c;还没有结束的过程就是一个进程&#xff0c;进程在电脑底部就是.exe文…

vscode 顶部 Command Center,minimap

目录 vscode 顶部 Command Center 设置显示步骤: minimap设置 方法一:使用设置界面 方法二:使用命令面板 方法三:编辑 settings.json 文件 左侧目录树和编辑器字体不一致: vscode 顶部 Command Center Visual Studio Code (VSCode) 中的 Command Center 是一个集中…

11年408考研真题解析-计算机网络

第一题&#xff1a; 解析&#xff1a;网络层虚电路服务和数据报服务 传输服务只有&#xff1a;有连接可靠和无连接不可靠两种&#xff0c;直接排除BC。 网络层指的是IP协议&#xff0c;由图二可知&#xff1a;运输层&#xff0c;网际层&#xff0c;网络接口层唯一有连接可靠的协…

vue3 本地windows下的字体的引用

1、先上了张效果&#xff1a; 2、windows 字体的路径&#xff1a;c:/windows/fonts/ 我们用华文行楷来测试下&#xff0c;先将华文行楷拷贝到/src/assets/fonts目录下。 3、然后我们来定义css&#xff1a; font-face {font-family: fyxk;font-style: normal;src: local(Opensan…

图结构感知的Transformer:一种新的图表示学习方法

人工智能咨询培训老师叶梓 转载标明出处 尽管图神经网络&#xff08;GNNs&#xff09;在处理图数据方面取得了显著成就&#xff0c;但它们在表达能力和捕获长距离依赖方面存在局限性。为了突破这些局限&#xff0c;研究者们开始探索将Transformer架构应用于图表示学习。在此基…

人工智能的前景与未来就业市场:机遇、挑战与社会影响

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的方方面面&#xff0c;它不仅引领着技术革新的浪潮&#xff0c;更在无声中重塑着我们的就业市场和社会结构。站在这个时代的交汇点上&#xff0c;我们不禁要问&#xff1a;人工智能将…

Web Components之继承

我们在使用Web Components自定义组件的时候&#xff0c;我们需要继承HTMLElement这个浏览器内置对象&#xff0c;但是如果我要一些高级封装&#xff0c;给组件内置一些方法的话。我们就需要使用继承的方式&#xff0c;在父类中实现基本功能的封装。 1 父类的封装 以下是我的继…

Java多线程(1)—线程基础

一、关于线程 1.1 简介 计算机线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位。线程的优势在于提高了程序的效率和响应能力&#xff0c;尤其在处理 I/O 操作或多任务时。多线程编程能够充分利用多核处理器的计算能力&#xff0c;达到更高的性能。 …

Spring 源码分析

Spring 源码版本 4.2.8.RELEASE Bean 生命周期 动态代理 代理模式 优点: 在不修改目标对象的功能前提下&#xff0c;能通过代理对象对目标功能扩展缺点: 代理对象需要与目标对象实现一样的接口&#xff0c;所以会有很多代理类&#xff0c;一旦接口增加方法&#xff0c;目标对…

Apifox 「定时任务」操作指南,解锁自动化测试的新利器

定时任务是按照预设时间自动执行的任务&#xff0c;它可以有效解决一些常见问题&#xff0c;比如频繁执行的回归测试和大规模的接口测试&#xff0c;这些任务需要在固定时间点或间隔周期内自动运行&#xff0c;以确保软件的持续集成和持续交付过程中的稳定性和可靠性。通过使用…

Windows下 批量重命名文件【bat实现】-两个小问题

Windows下 批量重命名文件【bat实现】_bat批量重命名文件ren-CSDN博客 上面是原来的教程&#xff0c;我遇到了两个小问题&#xff0c;问题及解决如下&#xff1a; ①dir/b>rename.csv : 无法将“dir/b>rename.csv”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。…

【每天学个新注解】Day 2 Lombok注解简解(一)—@Data、@Build、@Value

Data 相当于同时使用了 Getter 、Setter 、RequiredArgsConstructor、ToString、EqualsAndHashCode 1、如何使用 需要同时使用Getter 、Setter 、RequiredArgsConstructor、ToString、EqualsAndHashCode注解一个Bean的时候。 2、代码示例 例&#xff1a; Data public cla…

CCC SPAKE2+流程解析

1、SPAKE2流程及SCP03通道介绍 SPAKE2流程发生在CCC车主配对过程中的Phase2。 SPAKE2流程为车辆和手机之间的数据交换建立了一个安全通道SCP03。 那这个SCP03通道是干啥的&#xff1f; 我们可以先简单的理解为&#xff1a;建立安全通道前&#xff0c;车辆和手机之间交互的AP…

剖解反转链表

剖解反转链表 思路&#xff1a; 1.若链表为空或者只存在一个节点&#xff0c;就无需反转&#xff0c;直接返回head 2.若存在多个节点 首先将head.next给到cur&#xff0c;并将head.next置为null 剩余的节点就利用头插法&#xff0c;反转链表 class Solution {public ListNo…

基于SpringBoot+Vue+MySQL的特色旅游网站系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着旅游业的蓬勃发展&#xff0c;人们对旅游体验的需求日益多样化与个性化。传统的旅游信息查询与预订方式已难以满足现代游客的需求。因此&#xff0c;我们开发了这款基于SpringBootVueMySQL的特色旅游网站系统。该系统旨在通…