当前位置: 首页 > news >正文

【MySQL】VARCHAR和CHAR的区别?

目录

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


在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.lryc.cn/news/461199.html

相关文章:

  • SQL Server日期查询常用语句
  • java地理方位角度计算
  • RabbitMQ service is already present - only updating service parameters
  • 贵州网站建设提升可见性的策略
  • SUGAR:用于皮层表面配准的球形超快图注意力框架|文献速递-基于深度学习的医学影像分类,分割与多模态应用
  • 华为高频手撕冲刺
  • 如何优雅的通过Spring Boot+Redission对订单实现定时关闭
  • 二、IPD 的定义与背景
  • STM32CubeMX初始生成工程
  • STM32单片机(F03C8T6)-点灯(寄存器点灯和库函数点灯)
  • PCL 3D-SIFT关键点检测(曲率不变特征约束
  • Android上的AES加密
  • 安全测试的漏洞类型
  • 51 | 适配器模式:代理、适配器、桥接、装饰,这四个模式有何区别?
  • ORM框架简介
  • Windows系统上根据端口号查找对应进程
  • 一文通透OpenAI o1:从CoT、Quiet-STaR、Self-Correct、Self-play RL、MCST等技术细节到工程复现
  • 如何解决与kernel32.dll相关的常见错误:详细指南解析kernel32.dll文件缺失、损坏或错误加载问题
  • Caffeine Cache解析(一):接口设计与TinyLFU
  • 深入探索LINUX中AWK命令:强大的文本处理工具
  • 数字化转型:解决项目管理困境的新路径
  • Arthas常用的命令(三)--monitor、jad 、stack
  • Power BI之常用DAX函数使用介绍——提供数据源练习
  • SQL-触发器(trigger)的详解以及代码演示
  • 【devops】x-ui 实现一键安装 x-ray 打造高速国际冲浪 | xray管理平台
  • Linux系统编程——进程标识、进程创建
  • 【超级福利】openMind开源实习来袭,奖励高达万元,解锁你的AI实践新篇章!
  • React JSX 使用条件语句渲染UI的两种写法
  • 谷歌-BERT-第四步:模型部署
  • 猫咪化身蒲公英,浮毛满屋乱飞,有哪些宠物空气净化器值得购买?