美文网首页
char和varchar,数据库设计时需要注意的一点

char和varchar,数据库设计时需要注意的一点

作者: 程就人生 | 来源:发表于2022-11-01 18:38 被阅读0次

char 和 varchar 都是 MySql 数据库中存储字符串的数据类型,它们也是经常被面试的题目之一。

char类型
char类型用于存储长度固定的字符串。存储范围:0~255个字符。举个例子:char(10) ,设置了10个字符,最多存储10个字符;字符串 "abc" 实际存储长度为10,包括7个空字符。但是,如果尾部有空字符,不被保留。因此,char的存储空间计算公式为:

char的存储空间 = 存储的预定空间 + 一个记录字符串长度的字节。
  • 特点:有可能浪费存储空间,但存储效率高;

  • 存储策略:用空间换时间;浪费点空间,提高存储效率;

  • 适用范围:md5加密字段、uid等长度固定的字段,或者存储的值都接近一个长度的字符串,以便提高存储效率。

varchar类型
varchar类型用于存储可变长度字符串。存储范围:0~65532个字符。举个例子:varchar(10),设置了10个字符,最多存储10个字符;字符串 "abc" 实际存储长度为3。如果尾部有空字符,会被保留。varchar对字符串的存储是这样的,字符串长度为255以内时,会保留一个字节存储字符串长度;字符串长度大于255时,会保留2个字节存储字符串长度;每次更改时,都需要更改存储长度,所以存储效率低;但是,varchar存储空间小。因此,varchar的存储空间计算公式为:

字符串长度小于等于255时,
  • 特点:节约存储空间,但存储效率低;
  • 存储策略:用时间换空间,可以节约存储空间;
  • 适用范围:备注等长度变化很大的字段,以便节约存储空间。

char 和 varchar 对比结果
我们从存储长度、存储效率、存储空间三个方面对比了char和varchar。得出这样一个结论:char可能存在多余空间,但存储效率高;而varchar则比较节约存储空间,但存储效率低;char使用空间换时间,而varchar则牺牲时间换空间。总的来说,char和varchar各有各的优缺点,因此在做数据库设计时,类似于md5加密、uid等固定长度的字符串,可以使用char来存储,以便获取更高的存储效率和查询性能。写在最后说了那么多,我们来做个测试,看一看它们的长度。先解释一下需要使用的两个命令:

# 单位是字节,uft8编码下一个汉字占用三个字节,gdk编码下一个汉字占用两个字节,字母、数字各占一个字节;

这里有一个表,表里有两个字段,name的数据类型是char(10),remark的数据类型是varchar(10),执行以下命令,查看一下它们各自的长度。

select name, char_length(name),length(name) , remark, char_length(remark),length(remark) from test_aa;

执行结果如下图所示:


查询结果好像和我们想的不一样,char类型为何不是固定长度10呢?别急,再来增加一条尾部带空字符串的数据。

insert into test_aa values('123456789 ','我们 ')

再查询一次,查询结果如下图所示:


char类型的字段,尾部空字符串没被保留;而varchar类型的字段,尾部空格保留了。其实,在上面我们已经说得很清楚了。char长度不足时会补足空字符,但末尾有空字符串时又不被保留,所以我们看到的查询结果是没有算上末尾空字符串的长度的。这就可以解释,为什么我们查询的char结果不是固定长度,眼见不一定为实呀。

相关文章

  • char和varchar,数据库设计时需要注意的一点

    char 和 varchar 都是 MySql 数据库中存储字符串的数据类型,它们也是经常被面试的题目之一。 ch...

  • mysql日常使用

    大纲: 一. mysql 数据类型 注意点: char和varchar使用char长度不可变,varchar长度可...

  • 31、CHAR 和 VARCHAR 的区别?

    CHAR 和 VARCHAR 的区别? 1、CHAR 和VARCHAR 类型在存储和检索方面有所不同 ...

  • mysql数据类型

    1. char和varchar char固定长度,varchar是可变长度长度固定,小于右边补空varchar占用...

  • char和varchar

    字符串可以指定为char,也可以指定为varchar。它们两个都可指定有限长度的字符串(当不知道多少字符时用...

  • CHAR和VARCHAR

    char和varchar类型相似,都用来存储字符串。但它们的保存和检索的方式不同。 区别一:定长和变长char属于...

  • char 和varchar

    char的长度是不可变的,而varchar的长度是可变的 1、定义一个char[10]和varchar[10],如...

  • Mysql字符串数据类型总结

    一、目录: 1.VARCHAR和CHAR的区别2.BLOB和TEXT的区别 二、VARCHAR 和 CHAR 的区...

  • face16 mysql数据库基础

    mysql数据库基础考点 char和 varchar的区别 innodb myisam的区别 请写出下面 mysq...

  • 数据库char,varchar,nchar类型区别

    数据库char,varchar,nchar类型区别 1、char 类型是一个字节 char(8)只能存8字母,ch...

网友评论

      本文标题:char和varchar,数据库设计时需要注意的一点

      本文链接:https://www.haomeiwen.com/subject/nugjtdtx.html