MySql中varchar和varchar的区别-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

MySql中varchar和varchar的区别

简介: 本文讲的是mysql中varchar和text字段类型理解, 最近有几个同学问我varchar和text有啥别吗,这个问题,以前说真的也没太多的整理,以前遇到text在设计中就是尽可能的拆到另一个表中,保持主表尽量的瘦小,可以让innodb bp缓存更多的数据。 今天借次机会系统整理一下

看了新公司的数据库设计,有些问题思考了一下,写这篇文章也就记录这个问题的思考过程。

首先从占用空间进行比较,varchar(10) 声明10个字节,数据保存时额外一个字节的长度前缀;varchar(1000)声明1000个字节,如果数据长度大于255,长度前缀是两个字节。而实际Varchar数据类型是根据实际的需要来分配长度的。有问题的参考这篇文章,挺有意思的一个实验,关于varchar的思考。

那么,既然主要关心磁盘占用没有问题,哪里可能出现问题

y6r5ep3gwy.jpeg
dh21hnmfxo.jpeg

意思就是说对于VARCHAR数据类型来说,硬盘上的存储空间虽然都是根据实际字符长度来分配存储空间的,但是对于内存来说,则不是。其时使用固定大小的内存块来保存值。简单的说,就是使用字符类型中定义的长度,即1000个字符空间,因为其会转换成CHAR。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产生比较大的不利影响。解释可以参见这里。

(https://stackoverflow.com/questions/1151667/what-are-the-optimum-varchar-sizes-for-mysql)。

所以我们在做库表设计的时候,一些大字段参数进行业务拆表,还有就是数据库设计时候varchar(n)这个字段要合理,不能太大。

这边再贴一下这个过程中发现的一篇有趣的帖子,是关于char和varchar的

http://tech.it168.com/a2011/0426/1183/000001183173.shtmlmysql存储代码类型

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章