初识MySQL · 数据类型

news2025/4/1 0:46:38

目录

前言:

数值类型

文本、二进制数据类型

时间类型

String类型


前言:

对于MySQL来说,是一门编程语言,可能定义不是那么的严格,但是对于MySQL来说也是拥有自己的数据类型的,比如tinyint,varchar等,不过通过本章的学习,你就会知道,这里的数据类型其实和C语言中的数据类型挺像的。

废话不多说,我们直接进入主题。


数值类型

首先是我们最能理解的数值类型,对于数值类型来说,分为以下几种:

其中,tinyint,int,smallint, bigint,对于tiny int基本就是我们在C语言阶段学习的char类型,不过这里我们要将char类型看作整数,范围是-128到127,对于int来说就是C语言阶段的int,对于smallint来说就是short int,对于big int来说就是C语言阶段的long long int,范围也是一样的。

以上是整数类型。

既然是整数,那么就有有符号和无符号之说,所以对于tiny int , int, long long int来说,就存在有符号和无符号两种情况,那么默认情况下是有符号,以下是演示:

create table test_1( t1 tinyint, t2 int, t3 bigint );

insert into test_1 values (-1,-1,-1);

创建了之后插入负数都是可以的,也就证明了默认情况下是有符号的。

然后对于BOOL类型就是和C语言中的bool类型一摸一样的,不用额外花时间去了解它。

接下来是类型float decimal

在这里的float和decimal实际上可以认为和C语言中的float和double是相似的,但是仅限于相似,因为在数据控制方面是有细微差别的。

我们只介绍decimal,知道了decimal咱们也就知道了float了,首先,我们插入一个decimal类型的数据的时候,什么也不带,这个时候它的宽度和精度都是默认的,这个默认值的范围是比较大的,同学们可以自行尝试。

那么我们可以通过decimal(m,n)控制它的宽度和精度,比如decimal(4,2)代表的是宽度为4,精度为2,精度为2的意思就是小数精度为2,宽度为4的意思就是代表有效数据的字符不能超过4个,比如数据99.99符合要求,100.00就不符合了,因为小数的00是刚需,但是整数超过了4-2 =2的字符数,所以这个数据是不符合decimal(4,2)的要求的,接下来我们结合实际情况查看:

create table test_deci( t1 decimal(4,2) );

然后插入数据类型,可以发现,虽然要求了精度为2,但是如果我们插入多位小数的数据,它实际上是会四舍五入的,如果四舍五入之后发现超过了宽度,就会报错了,同学们下来可以自行实验,那么decimal和float唯一的区别就是,精度不同,其他完全一样的,这是小数部分。

接下来是bit类型

create table test_bit( t1 bit(1), t2 bit(2), t3 bit(3) );

我们先直接创建一个表来测试,MySQL中的bit类型是位类型,比如t1只有一个bit位,那么它的取值只有一个:

插入2就不行了,毕竟只有一个bit位,那么同理:

同理,对于t2来说也是一样的,只有两个bit位,那么插入的话只有00 01 11三个取值。

那么对于t3咱就不测试了,同学们下来自行实验吧。

以上就是数值类型的简单介绍。


文本、二进制数据类型

接下来就是文本、二进制数据,不过本文对于二进制数据BLOB暂时不介绍,对于该类型的话有兴趣的话可以自行了解。

首先是char类型和varchar类型,其中对于char类型来说相信大多数初学MySQL的同学来说是比较自信,因为一看,欸这不就是我在C语言阶段学习的char类型,然后你可能还记得一个汉字在utf8环境下是两个字节,那么你说以下的语句是否会成功呢?

create table test_char( t1 char(2), t2 varchar(20) );
 insert into test_char values('中国','世界')

你可能一看,t1的数据类型是char,一看后面的2好像就是给了2个字节,那么一个汉字是2字节,中国是两个汉字,所以这里应该是4字节,那么应该会报错,可是实际上:
并没有报错。

这是因为MySQL中的char类型的单位是字符,也就是你看到的一个一个的文字,比如中国,是两个文字,所以它算是两个字符,同理,如果我插入的是ab,那么ab是两个英语字母,还是占两个字符,这就是char类型的独特之处,单位是字符类型

那么对于char和varchar类型,二者的不同在于一个是定长的,一个是边长的,对于char类型来说,它是固定长度的,最多可以一次性存储255个字符,对于varchar类型来说,它是变长的,可是这里的变长并不是我们理解的变长,我们生活中认为的变长是它可以无限延展,这里的变长实际上是在固定范围内变长,比如varchar(60),是指该数据在60个数据之内,要多少给多少,就像C++中的string类型一样,给定一个capacity,一个size,如果你的数据类型超过了size,那么size改变,再给你分配空间,你要是用不到的空间,capacity-size空出来的空间就先不给你了,反正你也用不上。

这才是MySQL中变长的理解。

对于变长数据来说,最多一次可以存放65525个字节,但是!

varchar中的长度有1-3个字节用来存放数据,并且当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。

所以当我们插入数据的时候(在utf8环境下),字符数是万万不能超过21844的,不过这个长度比较大,不太好测试,咱们知道这是varchar的特殊机制就行

那么以下是它们的优缺点对照:

如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5 ,如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。

定长的磁盘空间比较浪费,但是效率高。 变长的磁盘空间比较节省,但是效率低。 定长的意义是,直接开辟好对应的空间 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

以上是对于char类型和varchar类型的简单介绍。

那么对于text类型来说的话呢,简单看这几句话即可:

  1. TINYTEXT(255字节)、TEXT(64KB)、MEDIUMTEXT(16MB)、LONGTEXT(4GB);

  2. 适合存储大段非结构化文本(如文章、日志);

  3. 不支持默认值,且检索时需注意性能,通常建议与主表分离存储或谨慎使用全文索引。

对于默认值来说话,我们到本文后面的String类型会有一个简单的认识。


时间类型

对于时间类型来说分为了三种:

date:日期,格式为'yyyy-mm-dd',占用了三个字节

datetime: 时间日期格式,格式为‘yyyy-mm-dd hh:ii:ss’,占用了八字节

timestamp:时间戳,占用四字节。

create table test_date( t1 date, t2 datetime, t3 timestamp );

用这张表可以进行简单测试,不过对于MySQL5.7的版本,Ubuntu环境下的同学大概率是要额外指明自动更新字段的。

ALTER TABLE test_date 
MODIFY t3 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

以上是date简单的介绍。 


String类型

对于String类型分为enum类型和set类型,对于初学MySQL的同学来说,可能会将这里的enum和set联想到C++中的枚举类型和set类型,可是实际上并不是,甚至说一点关系都没有。

那么对于enum类型来说,它是一个单选类型,并且实际存储的时候它存储的是数字,也就是说我们可以利用类似于数组下标的方式来对enum类型进行任意操作:

对于Set类型来说它们之间的差别是set是多选类型,并且也支持数字,不过数字的方式稍微有点特别:

create table test_enum( e1 enum('a','b','c'), s1 set('a','b','c') );

我们首先创建了一张含有enum类型和set类型的表,我们简单插入几个数据就知道什么是单选类型和存储的是数字的意思了:

我们不管是插入的是字符a还是数字2,都成功的完成了插入,对于2来说,它代表的是字符b,所以插入的是b,那么单选类型的意思就是不能重复插入多个:

那么对于set类型来说是多选类型,所以就可以插入多个:

按道理来说,7并不应该是a b c三个的索引,可是为什么7就把a b c全部干进去了,因为7的二进制是111,也就是说,第一个1代表的是a,第二个1代表的是b,同理,如果我输入的是5,那么插入的就是a和c,这就是set和enum不同的地方。 

以上是enum和set的一个简单介绍。


感谢阅读!

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

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

相关文章

QT图片轮播器(QT实操学习2)

1.项目架构 1.UI界面 2.widget.h​ #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#define TIMEOUT 1 * 1000 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent n…

深度解析衡石科技HENGSHI SENSE嵌入式分析能力:如何实现3天快速集成

嵌入式分析成为现代SaaS的核心竞争力 在当今SaaS市场竞争中&#xff0c;数据分析能力已成为产品差异化的关键因素。根据Bessemer Venture Partners的最新调研&#xff0c;拥有深度嵌入式分析功能的SaaS产品&#xff0c;其客户留存率比行业平均水平高出23%&#xff0c;ARR增长速…

杂草YOLO系列数据集4000张

一份开源数据集——杂草YOLO数据集&#xff0c;该数据集适用于农业智能化、植物识别等计算机视觉应用场景。 数据集详情 ​训练集&#xff1a;3,664张高清标注图像​测试集&#xff1a;180张多样性场景样本​验证集&#xff1a;359张严格筛选数据 下载链接 杂草YOLO数据集分…

Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?

&#x1f680; Vue 2 探秘&#xff1a;visible 和 append-to-body 是谁的小秘密&#xff1f;&#x1f914; 父组件&#xff1a;identify-list.vue子组件&#xff1a;fake-clue-list.vue 嘿&#xff0c;各位前端探险家&#xff01;&#x1f44b; 今天我们要在 Vue 2 的代码丛林…

机器学习的一百个概念(1)单位归一化

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

SpringCould微服务架构之Docker(5)

Docker的基本操作&#xff1a; 镜像相关命令&#xff1a; 1.镜像名称一般分两部分组成&#xff1a;[repository]:[tag]。 2. 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表着最新版本的镜像。 镜像命令的案例&#xff1a; 镜像操作常用的命令&#xff1a; dock…

SpringAI与JBoltAI深度对比:从工具集到企业级AI开发范式的跃迁

一、Java生态下大模型开发的困境与需求 技术公司的能力断层 多数企业缺乏将Java与大模型结合的标准开发范式&#xff0c;停留在碎片化工具使用阶段。 大模型应用需要全生命周期管理能力&#xff0c;而不仅仅是API调用。 工具集的局限性 SpringAI作为工具集的定位&#xff1…

Python中multiprocessing的使用详解

1.实现多进程 代码实现&#xff1a; from multiprocessing import Process import datetime import timedef task01(name):current_timedatetime.datetime.now()start_timecurrent_time.strftime(%Y-%m-%d %H:%M:%S). "{:03d}".format(current_time.microsecond //…

强化学习与神经网络结合(以 DQN 展开)

目录 基于 PyTorch 实现简单 DQN double DQN dueling DQN Noisy DQN&#xff1a;通过噪声层实现探索&#xff0c;替代 ε- 贪心策略 Rainbow_DQN如何计算连续型的Actions 强化学习中&#xff0c;智能体&#xff08;Agent&#xff09;通过与环境交互学习最优策略。当状态空间或动…

飞书电子表格自建应用

背景 coze官方的插件不支持更多的飞书电子表格操作&#xff0c;因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后&#xff0c;就可以拿到id和key 参考教程&#xff1a; 创…

深度学习四大核心架构:神经网络(NN)、卷积神经网络(CNN)、循环神经网络(RNN)与Transformer全概述

目录 &#x1f4c2; 深度学习四大核心架构 &#x1f330; 知识点概述 &#x1f9e0; 核心区别对比表 ⚡ 生活化案例理解 &#x1f511; 选型指南 &#x1f4c2; 深度学习四大核心架构 第一篇&#xff1a; 神经网络基础&#xff08;NN&#xff09; &#x1f330; 知识点概述…

MCP Server 实现一个 天气查询

​ Step1. 环境配置 安装 uv curl -LsSf https://astral.sh/uv/install.sh | shQuestion: 什么是 uv 呢和 conda 比有什么区别&#xff1f; Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具&#xff0c;由 Astral 开发。定位为 pip 和 venv 的替代品…

Headless Chrome 优化:减少内存占用与提速技巧

在当今数据驱动的时代&#xff0c;爬虫技术在各行各业扮演着重要角色。传统的爬虫方法往往因为界面渲染和资源消耗过高而无法满足大规模数据采集的需求。本文将深度剖析 Headless Chrome 的优化方案&#xff0c;重点探讨如何利用代理 IP、Cookie 和 User-Agent 设置实现内存占用…

知识就是力量——HELLO GAME WORD!

你好&#xff01;游戏世界&#xff01; 简介环境配置前期准备好文章介绍创建头像小功能组件安装本地中文字库HSV颜色空间音频生成空白的音频 游戏UI开发加载动画注册登录界面UI界面第一版第二版 第一个游戏&#xff08;贪吃蛇&#xff09;第二个游戏&#xff08;俄罗斯方块&…

电脑连不上手机热点会出现的小bug

一、问题展示 注意: 不要打开 隐藏热点 否则他就会在电脑上 找不到自己的热点 二、解决办法 把隐藏热点打开即可

JAVA反序列化深入学习(八):CommonsCollections6

与CC5相似&#xff1a; 在 CC5 中使用了 TiedMapEntry#toString 来触发 LazyMap#get在 CC6 中是通过 TiedMapEntry#hashCode 来触发 LazyMap#get 之前看到了 hashcode 方法也会调用 getValue() 方法然后调用到其中 map 的 get 方法触发 LazyMap&#xff0c;那重点就在于如何在反…

鸿蒙项目源码-外卖点餐-原创!原创!原创!

鸿蒙外卖点餐外卖平台项目源码含文档包运行成功ArkTS语言。 我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

Leetcode算法方法总结

1. 双指针法解决链表/数组题目 只要数组有序&#xff0c;就要想到双指针做法。还有二分法 回文串一般也会用到双指针&#xff0c;回文串的长度由于可能是奇数也可能是偶数&#xff0c;所以在寻找时&#xff0c;既需要寻找奇数长度的回文串&#xff0c;也需要寻找偶数长度的回文…