【MySQL】VARCHAR和CHAR的区别?

embedded/2024/10/24 0:59:13/

目录

  • 区别
    • 存储方式
    • 最大长度
    • 存取效率
  • 使用场景
  • 参考


在MySQL中,VARCHARCHAR是两种常用的字符串数据类型,它们各自有不同的特点和适用场景。下面我将和大家一起了解这两种数据类型的区别及使用场景。

区别

存储方式

  • CHAR(N):定长存储,最多存储N个字符。
    如果存储的字符数没有超出N,则用空格填充至N个字符长度;如果超出,则会被截断,超出部分会被丢弃。CHAR类型在存储时会去掉尾随空格。
  • VARCHAR(N):变长存储,最多存储N个字符。
    实际存储时,只占用实际字符数+1或2个字节(用于存储长度信息,长度不超过255字节用1个字节,超过则用2个字节)的空间。VARCHAR类型不会去掉尾随空格。

比如定义一个char[10]varchar[10]

如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。

示例:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');
Query OK, 1 row affected (0.00 sec)mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
+---------------------+---------------------+
| CONCAT('(', v, ')') | CONCAT('(', c, ')') |
+---------------------+---------------------+
| (ab  )              | (ab)                |
+---------------------+---------------------+
1 row in set (0.06 sec)

最大长度

  • CHAR的最大长度为255个字符,与字符编码无关。
  • VARCHAR的最大长度为65,535字节。由于存储长度信息需要额外的字节,因此实际能存储的字符数会受到字符集的影响。例如,在UTF-8编码下,一个字符可能占用1至3个字节,因此VARCHAR能存储的字符数会相应减少。

存取效率

  • 由于CHAR是定长存储,数据库系统可以更容易地计算位置和长度,因此存取效率通常比VARCHAR要高。但这也意味着它会占用更多的磁盘空间。
  • VARCHAR是变长存储,节省空间但存取效率相对较低。不过,在大多数情况下,由于现代数据库系统的优化,这种效率差异可能并不显著。

使用场景

  • CHAR的使用场景:
    适合存储长度固定或需要填充、对齐的字符串。例如,身份证号码、手机号码、邮政编码等
    当需要对字符串进行快速排序或查找时,CHAR可能更适合,因为定长存储可以简化计算过程。
  • VARCHAR的使用场景:
    适合存储长度可变的字符串。例如,姓名、地址、描述性文本等。
    当需要更有效地使用存储空间或处理可变长度的数据时,VARCHAR是更好的选择。
    在MySQL索引中,VARCHAR类型的列经常被用作索引列,以提高查询性能。例如,为用户名、电子邮件、标题等列创建索引

参考

https://dev.mysql.com/doc/refman/8.4/en/char.html


http://www.ppmy.cn/embedded/129940.html

相关文章

MATLAB imnoise函数

**MATLAB imnoise函数用于向图像添加不同类型的噪声,以模拟真实世界中的噪声污染情况**。以下是该函数的具体说明: 1. **基本语法和参数**:imnoise函数的基本使用格式为g imnoise(I, type),其中g是添加噪声之后的图像&#xff0c…

【Linux系列】查询nginx相关的进程

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

构建后端为etcd的CoreDNS的容器集群(三)、etcd功能测试

本文使用官方etcd镜像生成一个容器,并进行功能测试。 一、镜像获取 请见上文:构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像 二、查看镜像 [rootlocalhost opt]# docker images REPOSITORY TAG …

Flink时间语义和时间窗口

前言 在实际的流计算业务场景中,我们会发现,数据和数据的计算往往都和时间具有相关性。 举几个例子: 直播间右上角通常会显示观看直播的人数,并且这个数字每隔一段时间就会更新一次,比如10秒。电商平台的商品列表&a…

运动监测网站毕设基于SpringBootSSM框架的计算机毕业设计

目录 ‌一、引言 ‌ 1. 开发背景 2. 开发目标 ‌二、系统设计与实现‌ ‌技术选型‌: ‌功能模块‌: ‌技术挑战与解决方案‌: 4. 测试与评估‌ ‌三、需求分析 1.用户需求分析‌ 2. 功能需求‌ 3.非功能需求‌ ‌四、成果与展…

Stable Diffusion Web UI 大白话术语解释 (二)

归纳整理,Stable Diffusion Web UI 使用过程中,相关术语 ControlNet ControlNet 说简单点,就是你可以给 AI 一些“规则”,比如让它根据某些线条、结构或者骨架去画图。 这样能让 AI 画出更符合你要求的图片,特别适合画…

【氮化镓】TCAD模拟研究缓冲层对器件SEB的影响机制

这篇文章是西安电子科技大学郝跃院士团队关于p-GaN门高电子迁移率晶体管(HEMTs)在单粒子烧毁(SEB)性能方面的研究,特别关注了缓冲层参数对SEB的影响。文章通过技术计算机辅助设计(TCAD)模拟来分析不同缓冲层电子迁移率和重离子入射深度对SEB特性的影响。 引言(Introdu…

嵌套div导致子区域margin失效问题解决

嵌套div导致子区域margin失效问题解决 现象原因解决方法 现象 <div class"prev"></div> <div class"parent"><div class"child"></div><div class"child"></div> </div> <div cl…