【MySQL篇】数据类型

news2025/5/15 10:59:42

目录

前言: 

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.coloradmin.cn/o/2308230.html

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

相关文章

【音视频】图像基础概念

一、图像基础概念 1.1 像素 像素是一个图片的基本单位,pix使英语单词pixtureelement的结合“pixel”的简称,所以像素有图像元素之意。 例如2500*2000的照片就是指横向有2500个像素点,竖向有2000个像素点,总共500万个像素&#x…

时钟树的理解

对应电脑的主板,CPU,硬盘,内存条,外设进行学习 AHB总线 -72MHZ max APB1总线 -36MHZ max APB2-72MHZ max 时序逻辑电路需要时钟线控制 ,含有记忆性的原件的存在。(只有时钟信号才能工作&…

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南20250302

CentOS vs Ubuntu - 常用命令深度对比及最佳实践指南 引言 在 Linux 服务器操作系统领域,CentOS 和 Ubuntu 是广泛采用的发行版。它们在命令集、默认工具链及生态系统方面各有特点。本文深入剖析 CentOS 与 Ubuntu 在常用命令层面的异同,并结合实践案例…

问题修复-后端返给前端的时间展示错误

问题现象: 后端给前端返回的时间展示有问题。 需要按照yyyy-MM-dd HH:mm:ss 的形式展示 两种办法: 第一种 在实体类的属性上添加JsonFormat注解 第二种(建议使用) 扩展mvc框架中的消息转换器 代码: 因为配置类继…

为AI聊天工具添加一个知识系统 之127 详细设计之68 编程 核心技术:Cognitive Protocol Language 之1

本文要点 要点 今天讨论的题目:本项目(为使用AI聊天工具的两天者加挂一个知识系统) 详细程序设计 之“编程的核心技术” 。 source的三个子类(Instrument, Agent, Effector) 分别表示--实际上actually ,…

多个pdf合并成一个pdf的方法

将多个PDF文件合并优点: 能更容易地对其进行归档和备份.打印时可以选择双面打印,减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf,双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …

周边游平台设计与实现(代码+数据库+LW)

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对旅游信息管理的提升&#xff0c…

python量化交易——金融数据管理最佳实践——qteasy创建本地数据源

文章目录 qteasy金融历史数据管理总体介绍本地数据源——DataSource对象默认数据源查看数据表查看数据源的整体信息最重要的数据表其他的数据表 从数据表中获取数据向数据表中添加数据删除数据表 —— 请尽量小心,删除后无法恢复!!总结 qteas…

⭐算法OJ⭐矩阵的相关操作【动态规划 + 组合数学】(C++ 实现)Unique Paths 系列

文章目录 62. Unique Paths动态规划思路实现代码复杂度分析 组合数学思路实现代码复杂度分析 63. Unique Paths II动态规划定义状态状态转移方程初始化复杂度分析 优化空间复杂度状态转移方程 62. Unique Paths There is a robot on an m x n grid. The robot is initially lo…

Baklib云内容中台的核心架构是什么?

云内容中台分层架构解析 现代企业内容管理系统的核心在于构建动态聚合与智能分发的云端中枢。以Baklib为代表的云内容中台采用三层架构设计,其基础层为数据汇聚工具集,通过标准化接口实现多源异构数据的实时采集与清洗,支持从CRM、ERP等业务…

一个基于vue3的图片瀑布流组件

演示 介绍 基于vue3的瀑布流组件 演示地址: https://wanning-zhou.github.io/vue3-waterfall/ 安装 npm npm install wq-waterfall-vue3yarn yarn add wq-waterfall-vue3pnpm pnpm add wq-waterfall-vue3使用 <template><Waterfall :images"imageList&qu…

【pytest框架源码分析一】pluggy源码分析之hook常用方法

简单看一下pytest的源码&#xff0c;其实很多地方是依赖pluggy来实现的。这里我们先看一下pluggy的源码。 pluggy的目录结构如下&#xff1a; 这里主要介绍下_callers.py, _hooks.py, _manager.py&#xff0c;其中_callers.py主要是提供具体调用的功能&#xff0c;_hooks.py提…

《Kafka 理解: Broker、Topic 和 Partition》

Kafka 核心架构解析:从概念到实践 Kafka 是一个分布式流处理平台,广泛应用于日志收集、实时数据分析和事件驱动架构。本文将从 Kafka 的核心组件、工作原理、实际应用场景等方面进行详细解析,帮助读者深入理解 Kafka 的架构设计及其在大数据领域的重要性。 ​1. Kafka 的背…

在docker容器中运行vllm部署deepseek-r1大模型

# 在本地部署python环境 cd /app/ python -m venv myenv # 激活虚拟环境 source /app/myenv/activate # 要撤销激活一个虚拟环境&#xff0c;请输入: deactivate# 进入虚拟环境安装modelscope pip install modelscope# 下载大模型&#xff08;7B为例&#xff09; modelscope do…

Django基础环境准备

Django基础环境准备 文章目录 Django基础环境准备1.准备的环境 win11系统&#xff08;运用虚拟环境搭建&#xff09;1.1详见我的资源win11环境搭建 2.准备python环境2.1 winr 打开命令提示符 输入cmd 进入控制台2.2 输入python --version 查看是否有python环境2.3在pyhton官网下…

使用DeepSeek实现自动化编程:类的自动生成

目录 简述 1. 通过注释生成C类 1.1 模糊生成 1.2 把控细节&#xff0c;让结果更精准 1.3 让DeepSeek自动生成代码 2. 验证DeepSeek自动生成的代码 2.1 安装SQLite命令行工具 2.2 验证DeepSeek代码 3. 测试代码下载 简述 在现代软件开发中&#xff0c;自动化编程工具如…

【考试大纲】中级网络工程师考试大纲(最新版与旧版对比)

目录 引言考试科目1:网络工程师基础知识考试科目2:网络工程师应用技术引言 最新的网络工程师考试大纲出版于 2024 年 10 月,本考试大纲基于此版本整理。 考试科目1:网络工程师基础知识 计算机系统知识1.1 计算机硬件知识 1.2 操作系统知识 1.3 系统管理 系统开发和运行…

Spring的下载与配置

1. 下载spring开发包 下载地址&#xff1a;https://repo.spring.io/webapp/#/artifacts/browse/simple/General/libs-release-local/org/springframework/spring 打开之后可以看到有很多版本供选择&#xff0c;因为视频教程用的是4.2.4版本&#xff0c;于是我也选择这个 右键…

解决IDEA使用Ctrl + / 注释不规范问题

问题描述&#xff1a; ctrl/ 时&#xff0c;注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码

学术小助手智能体

学术小助手&#xff1a;开学季的学术领航员 文心智能体平台AgentBuilder | 想象即现实 文心智能体平台AgentBuilder&#xff0c;是百度推出的基于文心大模型的智能体平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&#xff0c;…