【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是不需要的。

示例:

sql 复制代码
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

相关推荐
夏炎正好眠40 分钟前
mysql练习
数据库·mysql
NineData1 小时前
NineData 社区版正式上线,支持一键本地化部署!
数据库·程序员
大0马浓1 小时前
LLM训练如何从图片提取信息存入向量数据库
数据库·训练·rag
鱼骨不是鱼翅1 小时前
Mybatis操作数据库----小白基础入门
数据库·mybatis
已是上好佳2 小时前
介绍一下Qt 中的QSizePolicy 布局策略
数据库·qt
钡铼技术物联网关2 小时前
导轨式ARM工业控制器:组态软件平台的“神经中枢”
linux·数据库·人工智能·安全·智慧城市
驜鸈3 小时前
MySQL 的EXPLAIN 计划 type 字段详细说明
android·数据库·mysql
XiYang-DING3 小时前
【数据库系统概论】第一章 绪论
数据库·oracle
码上飞扬3 小时前
Oracle RAC配置原理详解:构建高可用与高性能的数据库集群
数据库·oracle·rac
小刘爱喇石( ˝ᗢ̈˝ )3 小时前
行式数据库与列式数据库区别
数据库·分布式