首页 > mysql中将字符串设为可变长度的类型有什么缺点?

mysql中将字符串设为可变长度的类型有什么缺点?

mysql中的字符串分为固定长度的char 或者varchar,可变长度的tinytext,text等,直接设置成可变长度的类型不是更省事,不用去估计可能的长度


题目就有问题:
固定长度的char ,varchar是不固定的,只是根据你设置的长度做最大上限做限制。text也一样,只是比较大,一般达不到上限。

char ,varchar达不到很大的数据量级别以及数据响应时,基本是无差别的。char固定长度,但是这类设计很少了,比如IP.一般常用varchar能减少表结构变动带来的问题。text是特殊处理,不推荐用。


VARCHAR比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’


可变长度找索引要找两次,速度会减慢


鉴于@papersnake君说了空间和效率上,我再啰嗦一下。
首先从字节上来说CHAR是定长,意思就是只要输入在我这个定长以下,不管是几个字符,它的实际占用空间都是CHAR定长的长度。而VARCHAR则相对来说会节省一点空间,比如:你VARCHAR的长度设为10,那么你只存储了两个字符长度,那么最终占用的空间也就是两个字符长度

还有一点就是关于用途:VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,这会造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。比如:存储用户密码MD5或者serialize加密之后的长度为32或者16,密码字段的类型就可以设置为CHAR定长32或者16

【热门文章】
【热门文章】