MySQL系列之数据类型(String)

导览
  • 前言
  • 一、字符串类型知多少
    • 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.rhkb.cn/news/498199.html

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

相关文章

Ubuntu24.04最新版本安装详细教程

Ubuntu 24.04 LTS发布说明 推荐的系统配置要求: 双核2 GHz处理器或更高 4 GB系统内存 25 GB磁盘存储空间 可访问的互联网 光驱或USB安装介质 Ubuntu 24.04官方下载网址:https://cn.ubuntu.com/download/desktop 04. Ubuntu 22.04(创建虚拟机方式一) 4…

03-系统调用

一、系统调用的概述 1.系统调用介绍 系统调用是操作系统提供给用户用来操作内核服务的一组接口(函数)的统称。 为什么要通过系统调用来访问系统资源? 因为系统资源不希望被用户随意访问,可能造成各种意想不到的错误,…

3.5mm耳机接口硬件连接

结构 以最复杂的结构为例 简单的结构无非就是没有MIC(麦克风)接口 上图的5就是Detect的作用 上面这两款产品都为3.5mm的音频插座,图一 为连接4节的音频座,而且有两个开关,1接地,2接MIC,3接左声…

svn不能添加.a文件

解决办法 在home目录下有一个.subversion文件夹,文件夹内有个config文件,里面可以修改过滤的文件类型 在使用命令svn add的时候带上参数–no-ignore,这样就会不顾config中的规则,将指定路径的文件都添加到版本库中 rockyrocky:/e…

计算机网络•自顶向下方法:网络应用原理

网络应用原理 网络应用架构 目前有两种主流的网络应用架构: 客户-服务器架构(Client-server) 服务器(server): 有一台总是在线的主机,上面运行着服务器程序(server)服务器主机(server machine)具有永久的…

net.eval()和net.trasin()的用法

当构建神经网络使用到dropout层等时,网络的正向传播后反向传播神经元的系数会有所不同,因此需要用.eval()和.train()来指定模型方向。 net.train() 作用:将模型设置为训练模式。影响: 启用 Dropout 层:Dropout 会随机…

数据结构与算法-目录

音视频流媒体开发-目录 iOS知识点-目录 Android-目录 Flutter-目录 数据结构与算法-目录 恋上数据结构与算法一 【恋上数据结构与算法一】(一)复杂度 【恋上数据结构与算法一】(二)动态数组 【恋上数据结构与算法一】(三)链表 【恋上数据结构与算法一】(四)栈 【恋上数据结构与…

算法训练营Day28 | leetcode 122.买卖股票的最佳时机II 55.跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 本题首先要清楚两点: 只有一只股票!当前只有买股票或者卖股票的操作 想获得利润至少要两天为一个交易单元。 贪心算法 这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低…

da白话讲深度学习-卷积网络

卷积神经网络(CNN)是指至少在网络的一层中使用卷积运算来代替一般的矩阵乘法运算的神经网络,因此名为为卷积神经网络(对于神经网络的发展与类型,可以学习站内的相关文章) 1.什么是卷积? 既然是卷积神经网络&#xff…

搭建android开发环境 android studio

1、环境介绍 在进行安卓开发时,需要掌握java,需要安卓SDK,需要一款编辑器,还需要软件的测试环境(真机或虚拟机)。 早起开发安卓app,使用的是eclipse加安卓SDK,需要自行搭建。 目前开…

12.30 linux 文件操作,磁盘分区挂载

ubuntu 在linux 对文件的相关操作【压缩,打包,软链接,文件权限】【head,tail,管道符,通配符,find,grep,cut等】脑图-CSDN博客 1.文件操作 在家目录下创建目录文件&#…

Python Celery快速入门教程

Celery 是一个简单、灵活且可靠的分布式任务队列框架,用于处理大量的异步任务、定时任务等。它允许你将任务发送到消息队列,然后由后台的工作进程(worker)来执行这些任务,并且支持多种消息中间件,如 Rabbit…

Unity WebGL 部署IIS

Unity WebGL 部署IIS iis添加网站WebGL配置文件WebGL Gzip模式浏览器加载速度优化iis添加网站 第一步在配置好IIS并且添加网站 WebGL配置文件 在web包Build文件夹同级创建web.config文件 web.config文件内容 <?xml version="1.0" encoding="UTF-8"?…

基于西湖大学强化学习课程的笔记

放在前面 课程链接 2024年12月30日 前言&#xff1a;强化学习有原理部分的学习&#xff0c;也有与实践相关的编程部分。我认为实践部分应该是更适合我的&#xff0c;不过原理部分也很重要&#xff0c;我目前是准备先过一过原理。 应该花多少时间学习这部分呢&#xff1f; 但是这…

CannotRetrieveUpdates alert in disconnected OCP 4 cluster解决

环境&#xff1a; Red Hat OpenShift Container Platform (RHOCP) 4 问题&#xff1a; Cluster Version Operator 不断发送警报&#xff0c;表示在受限网络/断开连接的 OCP 4 集群中无法接收更新。 在隔离的 OpenShift 4 集群中看到 CannotRetrieveUpdates 警报&#xff1a; …

Redis--持久化策略(AOF与RDB)

持久化策略&#xff08;AOF与RDB&#xff09; 持久化Redis如何实现数据不丢失&#xff1f;RDB 快照是如何实现的呢&#xff1f;执行时机RDB原理执行快照时&#xff0c;数据能被修改吗&#xff1f; AOF持久化是怎么实现的&#xff1f;AOF原理三种写回策略AOF重写机制 RDB和AOF合…

【数据结构】链表(1):单向链表和单向循环链表

链表 链表是一种经典的数据结构&#xff0c;它通过节点的指针将数据元素有序地链接在一起&#xff0c;在链表中&#xff0c;每个节点存储数据以及指向其他节点的指针&#xff08;或引用&#xff09;。链表具有动态性和灵活性的特点&#xff0c;适用于频繁插入、删除操作的场景…

开源电子书转有声书整合包ebook2audiobookV2.0.0

ebook2audiobook&#xff1a;将电子书转换为有声书的开源项目 项目地址 GitHub - DrewThomasson/ebook2audiobook 整合包下载 更新至v2.0.0 https://pan.quark.cn/s/22956c5559d6 修改:页面已转为中文 项目简介 ebook2audiobook 是一个开源项目&#xff0c;它能够将电子…

NSSCTFpwn刷题

[SWPUCTF 2021 新生赛]nc签到 打开附件里面内容 import osart (( "####!!$$ ))#####!$$ ))(( ####!!$:(( ,####!!$: )).###!!$:##!$:#!!$!# #!$: #$#$ #!$: !!!$:\ "!$: /\ !: /"\ : /"-."-/\\\-."//.-"…

java里classpath都包含哪些范围?

什么是 classpath &#xff1f; classpath 等价于 main/java main/resources 第三方jar包的根目录 「引」SpringBoot中的classpath都包含啥