美文网首页
MySQL中各种字符型的区别与意义

MySQL中各种字符型的区别与意义

作者: djz0306 | 来源:发表于2019-06-22 16:38 被阅读0次

字符型的类型比较多,常用的有 char, varchar, text, blob四种。本篇一一进行整理归纳。

char与varchar区别

存储方式与读取的区别

char 叫做定长字符串,每个数据存储的长度是固定的。好处是查找行记录时,完全可以通过行数与长度计算出来文件指针的偏移量,查找的效率比 varchar 高一些。缺点也是明显的无论是否达到指定长度,实际都占据指定的长度n,如果数据长度小于 n 会用空格在末尾补 n 个长度,会浪费一定的空间。

varchar 叫做变长字符串,数据存储的时候,即使没存满设定的长度,也不会用空格补满。那么就导致了变长的字符串读取和定长的方式不同。varchar 会在数据前用一个字节或者两个字节前缀来记录数据长度。如果声明的 varchar 长度超过255就是2个字节。

以公交车票价为例子来说明此过程。有些公交的票价是固定的,无论是坐一站还是从头坐到尾,都是一样的价格。这种计算方式的好处就是统计方便,每次只用投币2元即可,也不需要乘务员。但是就会导致即使坐了较短的距离也付了固定的钱。另一种公交的价格计算方式是依据乘坐的距离。坐的越长价格越贵。这种方式的好处就是不会出现只坐一两站却付了很多钱,但是有个缺点就是需要有个乘务员或者系统依据每次乘坐的距离。扣除花的钱。在 varchar 中数据前面的前缀就相当于售票员或者计价系统,按照上车地点,坐车距离,扣除每次花的钱。

类型 宽度 可存字符 实际字符长度(i<=M) 实际占用空间 利用率
char M M i M i/M <= 100%
varchar M M i i+(1-2)字节 i/(i+1或2) <100%

定长的利用率是可能达到 100% 的。下面可以验证一下:

含有char与varchar类型数据的表.jpg

插入一条数据:

insert into actor values ("闫妮 ","闫妮 ");

注意插入的数据后都有一个空格。然后以 concat 连接数据与感叹号可以发现:

char与varchar的区别.jpg

可以看到定长后方的空格并没有显示出来。因为 char 类型在不足长度 n 的时候用空格补齐,取出时再把右侧空格删除。意味着如果 char 类型右侧有空格时数据会空格丢失

存储范围的区别

char(M) 类型 M 的范围在0到255之间,而 varchar(M) 范围在0到65535之间

注意事项

在 cha(M) 与 varchar(M) 中 M 表示的是字符数,而不是字节数。例如以下例子:

char与varchar类型的长度意义.jpg

如果按照6个 utf8 中文字符理解,等于18个字节,可以完整存下 “wulinwaizhuan” 这串字母,但是最后只存了前六个字母。

text

text 是指文本来行,可以存比较大的本文内容,但是搜索速度慢,如果不是特别大的内容,还是使用 char 和 varchar 比较好。text 不用加默认值,加了也没有用

blob

blob 是二进制类型,一般用来存储图像音频等二进制信息。可以防止图片或者音频中的部分内容因为字符集的原因导致在入库时被过滤。

相关文章

  • MySQL中各种字符型的区别与意义

    字符型的类型比较多,常用的有 char, varchar, text, blob四种。本篇一一进行整理归纳。 ch...

  • MySQL

    MySQL概念 Mysql是关系型数据库,它是开源、关系型的。 与Oracle区别: Mysql是开源、Oracl...

  • oracle

    数据类型差异 数值型number类似mysql中的int字符型varchar2类似mysql中的varchar日期...

  • MySQL数据类型(2)

    mysql的数据类型: 字符型 数值型 日期时间型 内建类型 字符型: CHAR(不区分字符大小写),BINARY...

  • 2020-08-08数据蛙第十期题目

    Mysql 基础 1、Mysql中字段char、varchar的区别 char为定长,varchar为不定长字符串...

  • MySQL之在储存过程中使用表名为变量

      我们知道,在MySQL的储存过程中,一般的输入参数为各种数据类型,如数值型,字符型等。那么,能不能让输入参数等...

  • 2019-07-23

    Mysql中反引号和单引号的区别 反引号,一般在ESC键的下方。 它是为了区分MYSQL的保留字与普通字符而引入的...

  • oracle&mysql对比

    oracle&mysql对比 数据类型对比 1.字符型 mysql的字符型根据长度和是否定长分为了很多类型,常见的...

  • Java 中字节流与字符流的区别?

    Java 中字节流与字符流的区别? 知乎高赞回答。参考:Java 中字节流与字符流的区别?[https://www...

  • Oracle |  空值null和空字符串的区别

    Mysql中空字符<''>和空值的区别,一直都知道mysql中空字符串(”)和空值(null)之间有区别,但是没好...

网友评论

      本文标题:MySQL中各种字符型的区别与意义

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