【MySQL篇】数据类型

目录

前言: 

1,数据类型的分类

 ​编辑

 2 ,数值类型

2.1 tinyint类型

2.2  bit类型

 2.3 小数类型

2.3.1 float类型 

 2.3.2 decimal类型

 3,字符串类型

3.1 char

 3.2 varchar

3.3 char与varchar的比较

3.4日期和时间类型

 3.5 enum和set


前言: 

MySQL 是一个流行的开源关系型数据库管理系统。它支持多种数据类型,用于存储和管理数据。

MySQL提供了多种数据类型,合理选择数据类型对存储效率,查询性能和数据 准确性至关重要,本篇对MySQL 支持的主要数据类型分类及详细说明。

1,数据类型的分类

 

 

 

 2 ,数值类型

2.1 tinyint类型

tinyint大小为一个字节,无符号数的取值范围在0~255,有符号数的取值范围在-128~127。

使用示例:

  • 创建一个包含tinyint数据类型的表

create table if not exists t1( num tinyint);

  •  向t1中插入数据

mysql> insert into t1 values(1);

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into t1 values (-127);

Query OK, 1 row affected (0.01 sec)

 

mysql> insert into t1 values(-128);

Query OK, 1 row affected (0.00 sec)

  • 打印t1表中的信息 

select * from t1;

 

  •  插入超出范围的数字

mysql> insert into t1 values (-129);

ERROR 1264 (22003): Out of range value for column 'num' at row 1

 

mysql> insert into t1 values(128);

ERROR 1264 (22003): Out of range value for column 'num' at row 1

mysql>

 

将tiny设置为无符号类型,此时的数据范围就是0~255。

create table if not exists t2( num tinyint unsigned);

插入数据:

 

总结: 

MySQL中,整型可以指定符号的,默认是有符号的,通过unsigned可以来标识字段类型为无符号类型。

MySQL也不支持 插入超出数据类型范围的数,否则直接拦截。所以 可以保证插入的时候数据一定是合法的。在MySQL中,数据类型本身就是一种约束,所以无论使用者是否可以熟练的使用MySQL,这种约束都可以很好的保证数据是可预期的,完整的,合法的。 

2.2  bit类型

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

  • 创建一个包含bit类型的数据表并插入数据

create table if not exists t3(id int,num bit);

insert into t3 values(1,0);

insert into t3 values(2,1);

insert into t3 values(3,2);//err,默认只能插入0或1

 

  • 创建一个大小为8的bit类型数据表 

create table if not exists t4( id int,num bit(8));

insert into t4 values(1,25);
insert into t4 values(2,100);

insert into t4 values(2,255);
insert into t4 values(2,256);//err,同样不能越界 

 

 2.3 小数类型

 

2.3.1 float类型 

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

  • 创建一个长度为4,小数部分长度为2的小数的数据表 

create table if not exists t5(id int,num float(4,2));

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

  • 插入数据

insert into t5 values(1,-99.99);
insert into t5 values(2,0);
 insert into t5 values(3,99.99);
 insert into t5 values(3,99.991);
insert into t5 values(3,59.885);
insert into t5 values(3,100.00);//err

insert into t5 values(3,59.886);

 

 

同理,如果将float定义为unsigned无符号类型,那么float(4,2)的取值范围时0~99.99.

 2.3.2 decimal类型

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

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

创建一个数据表,长度为10,小数部分为8,比较float和decimal。 

create table if not exists t6( num1 float(10,8), num2 decimaimal(10,8) );

insert into t6 values (23.12345612,23.12345612);

insert into t6 values (12.12345678,12.12345678); 

 

 我们看到在数据一样的情况下,decimal的小数精度高于float。float表示的精度大约是7位。decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0,如果m被省略,默认是10。 

 3,字符串类型

3.1 char

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

  • 创建包含长度为2的字符串的数据表 

create table if not exists t7(id int,name char(2));

  • 插入数据 

insert into t7 values(1,'张三');
insert into t7 values(2,'李四');
insert into t7 values(3,'王五');

 

char(2)表示可以存储两个字符,可以是字母或者汉字,但是不能超过255个 。 

 

 3.2 varchar

varchar[(L)]:可变长度字符,L表示字符长度,最大长度为65535个字节。

  • 创建一个长度为6的字符串的数据表

create table if not exists t8(id int,name varchar(6));

varchar(6)表示可以存储6给字符。

  • 插入数据 

insert into t8 values(100,'hello');

insert into t8 values(100,'我爱你,中国');

insert into t8 values(100,'我爱敲代码!!');//err

 

关于varchar(len),len到底是多大,和表的编码密切相关。

  •  varchar长度可以指定为0~65535之间的值,但是有1~3个字节用来存储数据的大小,所以说有效字节数是65532
  • 当我们表的编码是utf8时,varchar(n)的参数n的最大值是65532/3=21844(因为utf8中,一个字符占3个字节),如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占个字节)。

 

3.3 char与varchar的比较

 

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

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

3.4日期和时间类型

 常见的日期有如下三个:

  • date:日期'yyyy-mm-dd',占用3个字节
  • datetime:时间日期格式'yyyy-mm-dd HH:ii:ss',表示范围从1000到9999,占用8个字节。
  • timestamp:时间戳,从1970年开始的yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用4个字节。表示现在 的时间。
  •  创建带时间的数据表

create table if not exists birthday(t1 date,t2 datetime,t3 timestamp);

  •  插入数据

insert into birthday (t1,t2) values ('1997-7-1','2008-8-8 12:1:1');

 

 3.5 enum和set

enum:枚举,单选类型

enum('选项1','选项2','选项3',...)

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

set:集合,多选类型

set(’选项值1‘,‘选项值2’,‘选项值3’,...)

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

  • 创建一个含有set的数据表 

create table votes(username varchar(30), hobby set('登山','游泳','篮球','武术'),gender enum('男','女'));

  • 插入数据 

insert into votes values ('雷锋','登山,武术','男');

insert into votes values ('张三','登山,武术','男');
 insert into votes values ('李四','游泳','女');

insert into votes values ('赵六','篮球','2');
insert into votes values ('王五','足球','男');//err

 

集合查询使用find_in_set函数 

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

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

 

 

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

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

相关文章

网络类型及数据链路层协议

网络类型的分类: p2p----point to point---点到点网络MA---Multi-Access---多点接入网络 BMA--- Broadcast Multi-Access Network ---广播型多点接入网络NBMA--- Non-Broadcast Multi-Access Network ---非广播型多点接入网络 数据链路层协议: MA网络…

序列化选型:字节流抑或字符串

序列化既可以将对象转换为字节流,也可以转换为字符串,具体取决于使用的序列化方式和场景。 转换为字节流 常见工具及原理:在许多编程语言中,都有将对象序列化为字节流的机制。例如 Python 中的 pickle 模块、Java 中的对象序列化…

企业微信里可以使用的企业内刊制作工具,FLBOOK

如何让员工及时了解公司动态、行业资讯、学习专业知识,并有效沉淀企业文化?一份高质量的企业内刊是不可或缺的。现在让我来教你该怎么制作企业内刊吧 1.登录与上传 访问FLBOOK官网,注册账号后上传排版好的文档 2.选择模板 FLBOOK提供了丰富的…

Java 大视界 -- Java 大数据在智能安防入侵检测与行为分析中的应用(108)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Spring IoC

前言: 我们介绍下Spring. 通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因. 这么说可能还是很抽象.用一句话概括就是Spring就是一个包含了众多工具和方法的IoC容器. 所…

如何配置虚拟机的IP上网

一.配置vm虚拟机网段 在虚拟机主页点击编辑->虚拟网络编辑器,选择VMnet8,要改动两个地方: 1.子网IP改成192.168.10.0 2.NAT设置->192.168.10.2 让所有的vm配置的虚拟机使用NAT时,它们的网段都是一致的。注意:这里的第三个部…

Java GC 基础知识快速回顾

目录 一、Java 垃圾回收(GC)基本概念和重要性分析 (一) Java 垃圾回收(GC)基本概念回顾 1.GC 三种常见语义 2.Mutator:应用程序的内存管理角色 3.TLAB(线程本地分配缓存&#x…

【Linux】Linux权限

1 Linux权限概念 Linux下有两种用户:超级用户(root),普通用户 超级用户:可以再linux系统下做任何事情,不受限制。 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”,普通用户的命令提示符是…

Linux笔记---缓冲区

1. 什么是缓冲区 在计算机系统中,缓冲区(Buffer) 是一种临时存储数据的区域,主要用于协调不同速度或不同时序的组件之间的数据传输,以提高效率并减少资源冲突。它是系统设计中的重要概念,尤其在I/O操作、网…

Tomcat基础知识及其配置

1.Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服…

机器学习数学通关指南

✨ 写在前面 💡 在代码的世界里沉浸了十余载,我一直自诩逻辑思维敏捷,编程能力不俗。然而,当我初次接触 DeepSeek-R1 并领略其清晰、系统的思考过程时,我不禁为之震撼。那一刻,我深刻意识到:在A…

数据结构之八大排序算法详解

目录 一、冒泡排序(Bubble Sort)原理代码实现时间复杂度 二、选择排序(Selection Sort)原理代码实现时间复杂度 三、插入排序(Insertion Sort)原理代码实现时间复杂度 四、希尔排序(Shell Sort&…

RocketMQ的运行架构

目录 1. 核心组件(1) NameServer(2) Broker(3) Producer(4) Consumer 2. 消息流转流程3. 高可用机制4. 扩展性与负载均衡5.容错机制5. 特殊功能支持6. 典型部署架构总结 RocketMQ 是一款高性能、高可靠的分布式消息中间件,其运行架构设计为分布式、可扩展、高可用的…

【AIGC系列】5:视频生成模型数据处理和预训练流程介绍(Sora、MovieGen、HunyuanVideo)

AIGC系列博文: 【AIGC系列】1:自编码器(AutoEncoder, AE) 【AIGC系列】2:DALLE 2模型介绍(内含扩散模型介绍) 【AIGC系列】3:Stable Diffusion模型原理介绍 【AIGC系列】4&#xff1…

算法日记32:15届蓝桥C++B填空(握手问题+小球反弹)

握手问题 一、题解 1、通过观察我们可以发现,题目属于数论中的蜂巢问题,但是我们这里不使用结论,而是通过分析推出 2、假设我们不考虑特殊情况(也就是那 7 7 7个人的情况),那么问题的答案应该为 int res0; for(int i49;i>1;i…

【三维分割】LangSplat: 3D Language Gaussian Splatting(CVPR 2024 highlight)

论文:https://arxiv.org/pdf/2312.16084 代码:https://github.com/minghanqin/LangSplat 文章目录 一、3D language field二、回顾 Language Fields的挑战三、使用SAM学习层次结构语义四、Language Fields 的 3DGS五、开放词汇查询(Open-voca…

Windows安装sql server2017

看了下官网的文档,似乎只有ubuntu18.04可以安装,其他debian系的都不行,还有通过docker的方式安装的。 双击进入下载的ISO,点击执行可执行文件,并选择“是” 不要勾选 警告而已,不必理会 至少勾选这两…

LabVIEW图像识别抗干扰分析

问题描述 在基于LabVIEW的探针定位系统中,存在两个核心技术难点: 相机畸变导致初始定位误差:非线性畸变使探针无法通过坐标变换直接精确定位,需采用粗定位图像修正的两段式控制策略。 图像识别可靠性不足:复杂背景&a…

Leetcode1 两数之和 python两种方法实现

Leetcode1 两数之和 python两种方法实现 文章目录 Leetcode1 两数之和 python两种方法实现方法一:枚举法(暴力解法)方法二:用空间换时间。 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为…

总结前端常用数据结构 之 队列篇【JavaScript 】

推动你的事业,不要让你的事业推动你。——爱因斯坦 目录 队列是什么?JS异步、事件循环、任务队列:队列的实现方法:‌数组实现‌ - 封装队列:对象实现(优化性能)- 封装队列: 队列应用…