MySQL系列之数据类型(String)

news2025/2/10 21:17:51
导览
  • 前言
  • 一、字符串类型知多少
    • 1. 类型说明
    • 2. 字符和字节的转换
  • 二、字符串类型的异同
    • 1. CHAR & VARCHAR
    • 2. BINARY & VARBINARY
    • 3. BLOB & TEXT
    • 4. ENUM & SET
  • 结语
  • 精彩回放

前言

MySQL数据类型第三弹闪亮登场,欢迎关注O。
本篇博主开始谈谈MySQL是如何存储字符串的,以及它有哪些规则或要求,如何正确的选择字符串类型等等话题。
马不停蹄,话不宜迟,咱们边聊边谈~
在这里插入图片描述

提示:本系列均以MySQL5.7版本为例,举例说明。

一、字符串类型知多少

先问问各位盆友,此时此刻,你们能够立即想到的MySQL字符串类型有哪些呢?
有位同学脱口而出:varchar,鼓掌~
有位同学大声喊出:text,鼓掌~
有位同学低声发出:char,接着鼓掌~
因为他/她们的回答都对,是吧?O(∩_∩)O哈哈~

事实上,答对了可能问题不大,但是答全了可能有点问题,接下来,博主提供一个完整答案吧,可供参考。

1. 类型说明

类型

说明

CHAR

字符类型,固定长度

VARCHAR

字符类型,可变长度

TEXT

字符类型,包括TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT

BINARY

字节类型,固定长度

VARBINARY

字节类型,可变长度

BLOB

字节类型,包含INYBLOB、BLOB、MEDIUMBLOB、LONGBLOB

ENUM

字符串对象,包含一个或多个枚举,比如(‘飞机’,‘高铁’)

SET

字符串对象,可为空,可包含一个或多个字符串,比如(‘a’,‘b’)

通过以上类型,综合看MySQL的字符串类型存储的数据主要包括3类:字符、字节和枚举。String类型支持字符和字节的自动切换,通过什么方法实现呢?答案是CHARACTER SET

2. 字符和字节的转换

我们定义了一张表:

CREATE TABLE test1
(
  col1 VARCHAR(10) CHARACTER SET binary,
  col2 TEXT CHARACTER SET binary
);

它其实和下表的定义是相同的:

CREATE TABLE test2
(
  col1 VARBINARY(10),
  col2 BLOB
);

提示:这里实际发了的String类型的自动转换,遵循一个规则:字符类型如set二进制,则自动转换为二进制(字节)类型。如CHAR变BINARY,TEXT变BLOB。需要说明的是SET和ENUM不受此规则影响。

二、字符串类型的异同

1. CHAR & VARCHAR

  • CHAR和VARCHAR类型相似,但存储和检索方式不同。它们在最大长度和是否保留空格方面也有所不同。
  • CHAR和VARCHAR类型的声明长度表示要存储的最大字符数。比如CHAR(30)最多可容纳30个字符。
  • CHAR列的长度固定为创建表时声明的长度,支持0到255之间的任何值。当存储CHAR值时,如字符不足,会使用空格填充到指定的长度。检索CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL模式,否则尾部空格将被删除。
  • VARCHAR列中的值是可变长度字符串。长度可以指定为0到65535之间的值。VARCHAR的有效最大长度取决于最大行大小(65535字节,在所有列之间共享)和使用的字符集。
  • 对于VARCHAR列,无论使用何种SQL模式,超过列长度的尾随空格在插入之前都会被截断,并生成警告。对于CHAR列,无论SQL模式如何,都会自动截断插入值中多余的尾随空格。
  • VARCHAR值在存储时不会被填充。

2. BINARY & VARBINARY

BINARY & VARBINARY类型和CHAR & VARCHAR类似,但是它们存储的是二进制字符串,而不是字符型字符串。这意味着它们具有二进制字符集和排序规则,所以比较和排序是基于字节完成。

但是BINARY & VARBINARY数据类型又不同于CHAR BINARYVARCHAR BINAR数据类型。对于后一种类型,BINARY属性不会导致该列被视为二进制字符串列。相反,它会导致使用列字符集的二进制(_bin)排序规则(或者如果没有指定列字符集,则使用表默认字符集),并且列本身存储非二进制字符串而不是二进制字节字符串。例如,如果默认字符集是latin1,则CHAR(5)BINARY被视为CHAR(6)character set latin1 COLLATE latin1_bin。这与BINARY(5)不同,BINARY存储具有二进制字符集和排序规则的5字节二进制字符串。

3. BLOB & TEXT

BLOB是一个二进制大对象,可以容纳可变数量的数据。其中又分为四种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。这些值的不同之处仅在于它们可以容纳的值的最大长度。与BLOB相似,TEXT类型也分四类:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。这些对应于四种BLOB类型,具有相同的最大长度和存储要求。

BLOB值被视为二进制字符串(字节字符串)。它们具有二进制字符集和排序规则,比较和排序基于列值中字节的数值。TEXT值被视为非二进制字符串(字符串)。它们具有二进制以外的字符集,并且根据字符集的排序规则对值进行排序和比较。

在某些情况下,可能需要将二进制数据(如媒体文件)存储在BLOB或TEXT列中。你可能会发现MySQL的字符串处理函数对于处理此类数据很有用。

提示:BLOB或TEXT对象的最大大小由其类型决定,但实际可以在客户端和服务器之间传输的最大值由可用内存量和通信缓冲区的大小决定。您可以通过更改max_allowed_packet变量的值来更改消息缓冲区大小,但必须对服务器和客户端程序都这样做。

4. ENUM & SET

ENUM是一个字符串对象,其值从表创建时明确。
ENUM类型具有以下优点:
在列具有有限可能值集的情况下进行紧凑的数据存储。比如:

CREATE TABLE desk(
    width VARCHAR(40),
    high VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);

那么SET又如何呢?
SET是一个字符串对象,可以有零个或多个值,每个值都必须从创建表时指定的允许值列表中选择。由多个集合成员组成的SET列值由逗号(,)分隔的成员指定。其结果是SET成员值本身(不含逗号)。SET最多可以有64个不同的成员。

提示:一个表在其ENUM和SET列中不能有超过255个唯一的元素列表定义,这些列被视为一个组。

结语

本期博主介绍了MySQL中的字符串类型相关知识点,有些很重要,有些只需了解它,欢迎关注哦。

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~


精彩回放


MySQL系列之数据类型(Date&Time)
MySQL系列之数据类型(Numeric)
MySQL系列之远程管理(安全)
MySQL系列之身份鉴别(安全)
MySQL系列之数据授权(安全)
MySQL系列之如何在Linux只安装客户端
MySQL系列之如何正确的使用窗口函数(基于8.0版本)
MySQL系列之数据导入导出
MySQL系列之索引入门(上)
MySQL系列之索引入门(下)


在这里插入图片描述

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

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

相关文章

【C++高并发服务器WebServer】-15:poll、epoll详解及实现

本文目录 一、poll二、epoll2.1 相对poll和select的优点2.2 epoll的api2.3 epoll的demo实现2.5 epoll的工作模式 一、poll poll是对select的一个改进,我们先来看看select的缺点。 我们来看看poll的实现。 struct pollfd {int fd; /* 委托内核检测的文件描述符 */s…

git提交到GitHub问题汇总

1.main->master git默认主分支是maser,如果是按照这个分支名push,GitHub会出现两个branch,与预期不符 解决方案:更改原始主分支名为main git config --global init.defaultBranch main2.git:OpenSSL SSL_read: SS…

CNN-GRU卷积神经网络门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据)

代码地址:CNN-GRU卷积神经网络门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据) CNN-GRU卷积神经网络门控循环单元多变量多步预测,光伏功率预测 一、引言 1.1、研究背景和意义 随着全球能源危机和环境问题的日…

编译原理面试问答

编译原理面试拷打 1.编译原理的基本概念 编译原理是研究如何将高级程序语言转换为计算机可执行代码的理论与技术,其核心目标是实现高效、正确的代码翻译。 **编译器:**将源代码转化为目标代码(机器码、字节码等)。一次翻译整个程…

LIMO:上海交大的工作 “少即是多” LLM 推理

25年2月来自上海交大、SII 和 GAIR 的论文“LIMO: Less is More for Reasoning”。 一个挑战是在大语言模型(LLM)中的复杂推理。虽然传统观点认为复杂的推理任务需要大量的训练数据(通常超过 100,000 个示例),但本文展…

Ollama 部署本地大语言模型

一、下载安装ollama 1.百度 ollama Ollama 2.点击下载 可以复制下载链接,使用下载器下载。 3.双击安装 默认安装目录:C:\Users\用户名\AppData\Local\Programs\Ollama 二、更改模型下载目录 0.默认下载目录 (跳过) 之前没下载过模型,不…

pytest-xdist 进行多进程并发测试!

在软件开发过程中,测试是确保代码质量和可靠性的关键步骤。随着项目规模的扩大和复杂性的增加,测试用例的执行效率变得尤为重要。为了加速测试过程,特别是对于一些可以并行执行的测试用 例,pytest-xdist 提供了一种强大的工具&…

24.ppt:小李-图书策划方案【1】

目录 NO1234​ NO5678​ NO1234 新建PPT两种方式👇docx中视图→导航窗格→标题1/2/3ppt新建幻灯片→从大纲→重置开始→版式设计→主题插入→表格 NO5678 SmartArt演示方案:幻灯片放映→自定义幻灯片放映→新建→选中添加

模型 替身决策

系列文章分享模型,了解更多👉 模型_思维模型目录。替身决策,换位思考,多角度决策。 1 替身决策模型的应用 1.1 替身决策模型在面试中的应用-小李的求职面试 小李是一名应届毕业生,正在积极寻找工作机会。在面试过程中…

ESP32S3读取数字麦克风INMP441的音频数据

ESP32S3 与 INMP441 麦克风模块的集成通常涉及使用 I2S 接口进行数字音频数据的传输。INMP441 是一款高性能的数字麦克风,它通过 I2S 接口输出音频数据。在 Arduino 环境中,ESP32S3 的开发通常使用 ESP-IDF(Espressif IoT Development Framew…

docker环境下部署face-search开源人脸识别模型

由于我们是直接将face-search部署在docker容器中的,所以,在部署之前一定要检查一下自己的docker环境,要不然部署过程中会出现各种各样的问题 我这里的docker环境是 一、安装docker环境 如果docker版本比较低或者docker-compose的版本比较低的情况下,部署的时候docker的yml…

飞牛fnOS安装了Airplay没有声音找不到声卡的问题

主要问题描述:我在飞牛的Docker里安装了 Airplay, 这样把NAS接一个外接音箱,就可以当成无线音箱来用,直接把手机的音乐播放投到上面来播放。 (文章底部有写我是怎么安装Airplay的) 我的报错如下&#xff1…

netcore openTelemetry+prometheus+grafana

一、netcore项目 二、openTelemetry 三、prometheus 四、grafana添加Dashborad aspire/src/Grafana/dashboards at main dotnet/aspire GitHub 导入:aspnetcore.json和aspnetcore-endpoint.json 效果:

全程Kali linux---CTFshow misc入门(38-50)

第三十八题: ctfshow{48b722b570c603ef58cc0b83bbf7680d} 第三十九题: 37换成1,36换成0,就得到长度为287的二进制字符串,因为不能被8整除所以,考虑每7位转换一个字符,得到flag。 ctfshow{5281…

用 DeepSeek + Kimi 自动做 PPT,效率起飞

以下是使用 DeepSeek Kimi 自动做 PPT 的详细操作步骤: 利用 DeepSeek 生成 PPT 内容: 访问 DeepSeek 官网,完成注册/登录后进入对话界面。输入指令,例如“请用 Markdown 格式生成一份关于[具体主题]的 PPT 大纲,需包…

自动驾驶数据集三剑客:nuScenes、nuImages 与 nuPlan 的技术矩阵与生态协同

目录 1、引言 2、主要内容 2.1、定位对比:感知与规划的全维覆盖 2.2、数据与技术特性对比 2.3、技术协同:构建全栈研发生态 2.4、应用场景与评估体系 2.5、总结与展望 3、参考文献 1、引言 随着自动驾驶技术向全栈化迈进,Motional 团…

DeepSeekMoE 论文解读:混合专家架构的效能革新者

论文链接:DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models 目录 一、引言二、背景知识(一)MoE架构概述(二)现有MoE架构的问题 三、DeepSeekMoE架构详解(一&a…

【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表

目录结构如下: https://github.com/kaede316/Pythons_pj.git 效果: 后续可扩展为工具网站: 更新 2025.02.09 1、增加等间距制作人 时间信息 2、增加判断润年的功能

[权限提升] Linux 提权 维持 — 系统错误配置提权 - Sudo 滥用提权

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Sudo 滥用提权原理 Sudo 是一个 Linux 系统管理命令,它允许系统管理员授予普通用户以指定身份执行指定命令的权限。该命令不仅减少了 Root 用户的登录时间和管理时…

如何修改IDEA的maven远程仓库地址

IDEA自动的maven的远程仓库地址为国外地址&#xff0c;导致下载依赖时很慢&#xff0c;通过如下方法可以将其修改为国内地址 选中模块&#xff0c;右击&#xff0c;创建setting.xml文件 添加阿里仓库地址 <mirrors><mirror><id>nexus-aliyun</id><…