05 数据类型

news2024/9/23 13:28:12

目录

  1. 分类
  2. 数值类型
  3. 小数类型
  4. 字符串类型
  5. 日期和时间类型
  6. 集合类型

1. 分类

在这里插入图片描述

2. 数值类型

在这里插入图片描述

tinyint

create table t1 (num tinyint);
insert into t1 values (1);
insert into t1 values (128); – 越界插入,报错
select * from t1;

在这里插入图片描述

说明:

  • 在mysql中,整形可以指定是右符号和无符号的,默认是有符号的

  • 可以通过UNSIGNED说明某个字段是无符号的

  • 无符号案例

create table t2(num tinyint unsigned);
insert into t2 values(-1); – 无符号,范围是:0-255
insert into t2 values(255);
selsect * from t2;

  • 其他类型自己推导

数据类型本身是一种约束,如果插入了不合法的数据,mysql会阻止对应的操作,如果插入成功,那数据就是合法的。这种是对使用者的约束,倒逼使用者规范正确的插入,如果出错,mysql也可以保证合法性,最终保证数据库中的数据可预期,完整

bit

基本语法:

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

举例:

create table t4(id int, online bit(1));
insert into t4 values(10, 10);
select * from t4; 发现怪异现象,数据没有出现

在这里插入图片描述

  • bit字段在显示时,是按照ASCII码对应的值显示,有些值是不可显示

insert into t4 values(1, 65);
insert into t4 values(2, ‘A’);
select * from t4;

在这里插入图片描述

  • 如果我们有这样的值,只存放0或1,这时可以定义bit(1),可以节省空间

create table t5(gender bit(1));
insert into t5 values(0);
insert into t5 values(1);
insert into t5 values(2); —插入2时,已经越界
ERROR 1406 (22001): Data too long for column ‘gender’ at row 1

3. 小数类型

float

语法:

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

案例:
小数:float(4,2)表示的范围是-99.99~99.99,保存值时会四舍五入

create table t3(id int, salary float(4,2));
insert into t3 values(100, -99.99);
insert into t3 values(101, -99.991); --多的一点会四舍五入
select * from t3;

在这里插入图片描述
位数不够会自动补全,当四舍五入超过范围时,也不能插入

insert into t3 values(100, -99.997);
insert into t3 values(100, 2.1);

在这里插入图片描述
如果定义的是无符号,这时范围上限不变,下限必须大于等于0,范围是0~99.99

create table t4(id int, salary float(4,2) unsigned);
insert into t4 values(100, -0.1);
show warnings;
在这里插入图片描述>insert into t4 valyes(100, -0);
insert into t4 valyes(100, 99.99);

float在数值较大时不能保证准确性,会有一定的精度丢失

alter table modify t4 salary float;

在这里插入图片描述

decimal

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

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

create table t5(id int, salary float(10,8), salary2 decimal(10,8));
insert into t5 values(100,23.12345612,23.12345612);

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

如果需要精度高,就用decimal

4. 字符串类型

char

语法:

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

create table t6(id int, name char(2));
insert into values(100, ‘ab’);
insert into values(100, ‘中国’);
select * from t6;

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

create table t6(id int, name char(256));
ERROR 1074 (42000): Column length too big for column ‘name’ (max = 255); use
BLOB or TEXT instead

varchar

语法:

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

案例:

create table t7(id int, name varchar(6)); --表示可以存放6个字符
insert into t7 values(100, ‘hello’);
insert into t7 values(100, ‘我爱你,中国’);
select * from t7;

在这里插入图片描述
说明:
varchar是变长字符串,实际len值多大,和表的编码密切相关

  • varchar长度可以指定为0-65536之间的值,但是有1-3个字节用于记录数据大小,所以说有效字节数是65532
  • 当表的编码是utf8时,carchar的参数n最大值是65532/3=21844,因为utf中,一个字符是3个字节。如果编码是gbk,varchar的参数n最大是65532/2=32766,因为gbk,一个字符占2字节

create table t8(name varcahr(21845))charset=utf8; --验证了utf8不能超过21844
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. You have to change some columns to
TEXT or BLOBs
create table tt11(name varchar(21844)) charset=utf8;
Query OK, 0 rows affected (0.01 sec)

char和varchar比较

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

5. 日期和时间类型

常用的日期有如下三个:
data:日期’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 into birthday(t1,t2) values(‘1997-7-1’, ‘2008-8-8 12:1:1’); --插入两种时间
select * from birthday;

在这里插入图片描述

//更新数据
update birthday set t1=‘2000-1-1’;
selsect * from birthday;

在这里插入图片描述

6. 集合类型

enum和set

语法:

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

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

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

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

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

案例:
有一个调查表votes,需要调查人的喜好,比如(登山,游泳,篮球,武术)中去选择(可以多选)(男,女)[单选]

create table votes(
username varchar(30),
hobby set(‘登山’,‘游泳’,‘篮球,‘武术’’), --注意,使用数字标识每个爱好的时候,想想linux权限,采用比特位和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用逗号分隔的字符串

在这里插入图片描述

这个函数只能返回1个结果,不能查询两个,例如(‘ab’, ‘a,b,c’)

查询爱好为登山的人

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

在这里插入图片描述

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

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

相关文章

LeetCode面试150——14最长公共前缀

题目难度:简单 默认优化目标:最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 横向扫描 3.2 纵向扫描 3.3 分治 3.4 二分查找 参考文献 1 题目描述 编写一个函数来查找字符串数组中的最长…

MyBatis 基本操作 - 注解版

目录 一,查询 - select 1.1 全列查询 1.2 指定列查询 1.3 赋值问题 方法一:起别名 方法二:结果映射 方法三:添加配置 二,新增 - Insert 2.1 使用对象插入 2.2 获取主键 三,删除 - Delete 四&am…

使用Gitlab实现monorepo多项目CICD

CI/CD是什么 CI/CD(Continuous Intergration/Continuous Delpoy),即持续集成/持续部署,或称为持续集成/持续交付,作为一套面向开发和运维团队的解决方案,CI/CD 主要解决集成新代码和向用户频繁交付应用的问…

SQL注入实例(sqli-labs/less-22)

0、初始页面 1、确定闭合字符 闭合字符为单引号双引号 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标

初识redis:String类型

在Redis中的所有key都是字符串,而value的类型是存在差异的。本文介绍的就是value中的string类型。 首先要知道,Redis中的字符串,直接就是按照二进制数据的方式存储的,不会做任何的编码转换。也就是说,redis不仅仅可以…

JMeter——异步请求性能测试

前段时间任务要求要对一种异步请求做性能测试,异步请求步骤如下: step1: 发一个数据计算的请求,response里面返回一个jobId step2: 带上这个jobId,就可以实时查看这个请求返回的jobStatus, 如果jobStatus0, 则成功返回计算结果&…

29_反序列化漏洞、反序列化概念、反序列化原理、反序列化漏洞防御、序列化

概念 序列化和反序列化 序列化 将对象型转换成字符串的过程。 反序列化 将字符串还原成对象型的过程。 反序列化漏洞&#xff08;了解&#xff09; 便于传输和存储 接下来上代码进行测试&#xff0c;先搞个类&#xff0c; <?phpheader("content-type:text/html;…

基于SpringBoot+Vue的校园失物招领系统(带1w+文档)

基于SpringBootVue的校园失物招领系统(带1w文档) 基于SpringBootVue的校园失物招领系统(带1w文档) 本课题研发的校园失物招领系统管理系统&#xff0c;就是提供校园失物招领系统信息处理的解决方案&#xff0c;它可以短时间处理完信息&#xff0c;并且这些信息都有专门的存储设…

51单片机个人学习笔记16(红外遥控)

前言 本篇文章属于STC89C52单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 [1-1] 课程简介_哔哩…

Qt编程技巧小知识点(2)GPIB缓存区数据读取

文章目录 Qt编程技巧小知识点&#xff08;2&#xff09;GPIB缓存区数据读取小结 Qt编程技巧小知识点&#xff08;2&#xff09;GPIB缓存区数据读取 大端小端的问题&#xff0c;其主要表现如下例子&#xff1a; 例如&#xff1a;输入为QByteArray str "#14M\xB6q\xC1\n&qu…

ImageNet_2014数据集下载与解压

前言 最近在配OpenLongTailRecognition-OLTR代码用的ImageNet_2014&#xff0c;因为数据集较大的原因&#xff0c;导致下载和数据集配置一直被耽误&#xff0c;进度很满&#xff0c;故此记录&#xff0c;以背不时只用。 进入imageNet主页 注: 需要注册账号&#xff0c;教育邮箱…

【论文阅读】MobileNetV4 - Universal Models for the Mobile Ecosystem

文章目录 摘要一、介绍二、相关工作三、与硬件无关的帕累托效率四、通用倒置瓶颈五、移动MQA六、MNv4模型的设计6.1 为增强的体系结构改进NAS6.2 MNv4模型的优化 7. 结果7.1 ImageNet分类7.2 COCO目标检测 8. 强化蒸馏配方9. 结论 MobileNetV4 - 移动生态系统的通用模型 摘要 …

linux系统编程:(4)

1.系统时间的获取函数 1. time函数 功能: 获得1970年到现在的秒数 参数: t:存放秒数的空间首地址 返回值: 成功返回1970年到现在的秒数 失败返回-1 2.localtime 函数 功能: 将一个秒数转化成日历时间 参数: timep:保存秒数空间的地址 返回值: 成功…

Node.js异步编程

【图书介绍】《Node.jsMongoDBVue.js全栈开发实战》-CSDN博客 《Node.jsMongoDBVue.js全栈开发实战&#xff08;Web前端技术丛书&#xff09;》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com) 本节主要介绍Node.js异步编程的相关内容。内容包括 同步API、异步API、同步API与…

拿捏!远程观影之详细操作教程

碎碎念 相信不少小伙伴是有收藏影片的&#xff0c;时不时会取出来进行观看。大多时候&#xff0c;我们都是在局域网中观影&#xff0c;局域网中是直连&#xff0c;所以可以一直流畅进行观影&#xff0c;但是有不少朋友是有远程观影需求的&#xff0c;那么怎么实现能随时在手机…

squidpy学习总结

下载安装 首先不要使用pip install squidpy[interactive] 安装&#xff0c;因为我在base环境里python版本是python3.11.5, 导致安装narapi包的时候出现问题&#xff0c;所以我选择的办法是 conda create -n sp_env python3.9.12 注意这个有个问题&#xff0c;我的mac为啥建立不…

【git】git与​TortoiseGit​下载教程

下载地址&#xff1a;https://git-scm.com/ 下载TortoiseGit 官网链接&#xff1a;https://tortoisegit.org/ 拉去代码错误&#xff1a; 找到在本地安装的 git 服务的根目录 -> Git -> usr -> bin 目录下选中 ssh.exe &#xff0c;再点击打开即可&#xff0c;如下图&a…

在Ubuntu上基于NDK(r21)交叉编译FFmpeg for Android

各软件版本号&#xff1a;VMware为17 Pro、FFmpeg版本号为4.3.8、NDK版本号为r21e、Ubuntu版本号为20.04 1.下载FFmpeg4.3.8并解压 2.下载NDK&#xff08;r21e&#xff09;并解压 https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip 3.在ffmpeg-4.…

FastReport数据区横向排列展示

FastReport数据区横向排列展示 步骤1&#xff1a;设置数据区的Columns Editor属性 1、Count&#xff1a;2表示数据区里的控件将最多显示两列 2、AcrossThenDown&#xff1a;数据区里的控件将会被从做到右依次循环遍历 3、Width&#xff1a;9.25&#xff0c;因为我只设置了两列…

mmdebstrap:创建 Debian 系统 chroot 环境的利器 ️

文章目录 mmdebstrap 的一般性参数说明 &#x1f4dc;mmdebstrap 的常见用法示例 &#x1f308;使用 mmdebstrap 的注意事项 ⚠️ &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&am…