mysql数值型和字符型区别_MySQL中各种字符型的区别与意义

字符型的类型比较多,常用的有 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% 的。下面可以验证一下:

b0f98b979e94

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

插入一条数据:

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

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

b0f98b979e94

char与varchar的区别.jpg

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

存储范围的区别

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

注意事项

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

b0f98b979e94

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

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

text

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

blob

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值