开发者社区 问答 正文

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

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

展开
收起
蛮大人123 2016-02-12 16:16:23 2702 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    鉴于@papersnake君说了空间和效率上,我再啰嗦一下。
    首先从字节上来说CHAR是定长,意思就是只要输入在我这个定长以下,不管是几个字符,它的实际占用空间都是CHAR定长的长度。而VARCHAR则相对来说会节省一点空间,比如:你VARCHAR的长度设为10,那么你只存储了两个字符长度,那么最终占用的空间也就是两个字符长度。
    还有一点就是关于用途:VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,这会造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。比如:存储用户密码,MD5或者serialize加密之后的长度为32或者16,密码字段的类型就可以设置为CHAR定长32或者16

    2019-07-17 18:41:29
    赞同 展开评论