MySQL系列之数据类型(String)

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上) Matlab+Yalmip两阶段鲁棒优化通用编程指南(上篇),内容包括: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题,并使用C&CG算法进行迭代求解。 阅读详情
AI摘要

本文以MySQL 5.7为例,介绍了MySQL存储字符串的规则及类型选择。阐述了字符串类型存储的数据包括字符、字节和枚举,说明了字符和字节的转换规则。还对比了CHAR与VARCHAR、BINARY与VARBINARY、BLOB与TEXT、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 BINARY或VARCHAR 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系列之索引入门(下)


在这里插入图片描述

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA 阅读详情

相关推荐

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 419

mysql:列类型之string

环境: window10 vs2022 .net 6 mysql 8.0.25 DBeaver 参考: 《博文:mysql字符集编码和排序规则》 《博文:细说ASCII、GB2312/GBK/GB18030、Unicode、UTF-8/UTF-16/UTF-32编码》 《mysql:11.3 String Data Types》 在mysql中说string,一般说的是char、varchar、text、binary、varbinary、blob、enum、set类型。而text、blob又要再加上

火焰 7678

H无穷控制学习笔记——加权灵敏度H无穷控制问题

一、加权灵敏度H无穷问题 系统结构如上图所示。被控对象P的状态空间方程为(Ap,Bp,Cp,DpA_p,B_p,C_p,D_pAp​,Bp​,Cp​,Dp​),加权函数W1的状态空间方程为(A1,B1,C1,D1A_1,B_1,C_1,D_1A1​,B1​,C1​,D1​),加权函数W2的状态空间方程为(A2,B2,C2,D2A_2,B_2,C_2,D_2A2​,B2​,C2​,D2​),加权函数W3的状态空间方程为(A3,B3,C3,D3A_3,B_3,C_3,D_3A3​,B3​,C3​,D3​)。

一饮丶一啄的博客 4349

MySQL数据类型之字符串(string)

字符类型(CHAR Types) CREATE TABLE t1 (c1 CHAR(10)); 该语句创建了一张t1表,表中只有一个字段c1,类型为char,char(10)括号中的10表示字段c1最多能够存储10个字符。char最多可以存储255个字符,最小可以存储0个字符。可以如下向表中插入数据: INSERT INTO t1 (c1) VALUES(''); INSERT INTO...

L 2万+

从Microchip SDK到STM32实战:手把手教你移植LAN9252 EtherCAT从站驱动(含EEPROM配置避坑)

本文详细介绍了如何将Microchip SDK中的LAN9252 EtherCAT从站驱动移植到STM32F407平台,包括FSMC接口配置、中断处理适配和EEPROM配置等关键步骤。通过实战指南和避坑技巧,帮助开发者快速实现高性能EtherCAT从站设备的开发,适用于工业自动化领域。

weixin_29197835的博客 446

手机拍照也能玩高光谱?教你用TensorFlow Lite在Android上实现实时RGB转高光谱

本文介绍了如何利用TensorFlow Lite在Android设备上实现实时RGB到高光谱的图像重构技术。通过深度学习模型优化和移动端部署策略,使智能手机具备专业级光谱分析能力,适用于农业检测、化妆品分析等多个领域。

weixin_29091105的博客 245

MySQL中你可能忽略的COLLATION实例详解

文章来源: 学习通http://www.bdgxy.com/普学网http://www.boxinghulanban.cn/智学网http://www.jaxp.net/ 前言 MySQL 数据库的字符串类型有 CHAR、VARCHAR、BINARY、BLOB、TEXT、ENUM、SET。不同的类型在业务设计、数据库性能方面的表现完全不同,其中最常使用的是 CHAR、VARCHAR。今天我就带你深入了解字符串类型 CHAR、VARCHAR 的应用。 CHAR 和 VARCHAR 的定义 CHAR(N)

菜鸟教程 1697

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

【MySQL】数据库数据类型

创建一张表t6,内部包含 一个bigint类型的id 以及 无符号的浮点数类型的salary,并且salary共有4位,其中2位是小数。创建一张表t5,包含 int类型的id 以及 float类型的salary,并且salary共有4位,其中2位是小数。创建一张表 t10 ,内部包含 date类型的t1 ,datetime类型的t2,timestamp类型的 t3。可当插入 (123,5)时 ,由于 online 的类型为1个比特位,所以只能插入0或者1,所以会报错。

qq_62939852的博客 2118

electron打包客户端在rk3588上支持h265硬解

前言我们的客户端程序是用electron打包的前端程序,其在rk3588主机上的linux环境运行。之前使用客户端查看h264编码的视频直播是没有问题的,但视频源更改为h265编码后就不能查看了,奇怪的是打包的windows客户端则可以正常查看,另外rk3588主机上的chromium浏览器也是支持播放h265编码的视频的,并且是硬件解码。

lxkj_2024的博客 2007

【国产MCU系列】-GD32F4开发环境搭建(基于Embedded Builder)

GD32F4系列MCU采用Arm® Cortex®-M4内核,处理器主频高达240MHz,可支持算法复杂度更高的嵌入式应用,具备更快速的实时处理能力,并拥有业界领先的大容量存储优势。

视觉与物联智能 3078

MySQL数据类型:字符串类型详解

在MySQL数据库中,字符串数据类型用于存储各种文本信息。这些数据类型主要包括`CHAR`、`VARCHAR`、`TEXT`和`BLOB`等。

常备不懈 4123

DRV8711驱动器的各寄存器的介绍

drv8711驱动器

PCLintelligence的博客 1634
上一篇: MySQL系列之数据类型(Date&Time)
下一篇: 微服务实战系列之玩转Docker(十九)
一叶飞舟
一叶飞舟 新星创作者: Java技术领域 新星创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄16年 6566粉丝 140原创
评论 76
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值