资讯专栏INFORMATION COLUMN

数据库varchar长度最佳实践

livem / 3015人阅读

摘要:主要以的或为例,其他数据库中基本也有类型并需要提供长度的参数。以前的版本的最大长度就是,之后是。而之后表示长度的字节数会变成个。尽管是动态存储的,但别的数据库引擎不一定是如此。不管其中每一行存储的数据是长还是短。

  

http://dba.stackexchange.com/questions/76469/mysql-varchar-length-and-...

主要以mysql的InnoDB或MyISAM为例,其他数据库中基本也有varchar类型并需要提供长度的参数。
需要说明的是,例如VARCHAR(3)表示的是这一列最多存3个字符而不是3个字节,比如可以存“一二三”,实际存储时是编码为utf-8的。

在mysql中,VARCHAR(3)VARCHAR(255)在存储方式上是没有区别的,都是1个字节表示字符串长度和字符串经utf-8编码后的字节。mysql5.0.3以前的版本varchar的最大长度就是255,之后是65535。而VARCHAR(256)之后表示长度的字节数会变成2个。其实在今天来说多一个字节也没什么区别,但为了兼容性,通常的数据库设计中还是会出现很多VARCHAR(255)

但事实上,把所有较短的字符串列都设为VARCHAR(255)并不是最好的做法。尽管InnoDB是动态存储的,但别的数据库引擎不一定是如此。有的可能会使用固定长度的行,或者固定大小的内存表。内存表即为sql查询中产生的临时表。它通常会为varchar类型分配最大的空间,比如utf-8编码下,内存表可能要为VARCHAR(255)分配2+3×255字节(2是因为存的是字节长度而不是字符长度),如果行数非常多,这也会带来性能问题。不管其中每一行存储的数据是长还是短。另外也注意到InnoDB的单列索引每个结点的最大是767字节(即2+3×255)。

InnoDB最大的行的大小是半个database page(大约8000字节),如果可变长的列(如varbinary、varchar、text、blob)超过了这个大小会被存到外面去,行里面只是存一个指针。这会比存inline慢很多。提到这个不得不说一下text类型,text的存储方法应该和varchar也没什么区别,就是没有长度的限制,因此它在有join等产生中间结果的查询中会非常慢。

所以结论是,我们应该用尽可能小的类型而不是统一用VARCHAR(255)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17464.html

相关文章

  • 据库varchar长度最佳实践

    摘要:主要以的或为例,其他数据库中基本也有类型并需要提供长度的参数。以前的版本的最大长度就是,之后是。而之后表示长度的字节数会变成个。尽管是动态存储的,但别的数据库引擎不一定是如此。不管其中每一行存储的数据是长还是短。 http://dba.stackexchange.com/questions/76469/mysql-varchar-length-and-... 主要以mysql...

    894974231 评论0 收藏0
  • 据库varchar长度最佳实践

    摘要:主要以的或为例,其他数据库中基本也有类型并需要提供长度的参数。以前的版本的最大长度就是,之后是。而之后表示长度的字节数会变成个。尽管是动态存储的,但别的数据库引擎不一定是如此。不管其中每一行存储的数据是长还是短。 http://dba.stackexchange.com/questions/76469/mysql-varchar-length-and-... 主要以mysql...

    xuexiangjys 评论0 收藏0
  • PHP & MySQL 「数据关联一对一」的最佳实践

    摘要:前言在开发过程中,通常会遇到很多一对一数据的处理情况。关于可以看我的另一篇文章多维数组中的。最佳实践这一次,我们用到了其他两个函数。勘误感谢评论区对文章内容错误之处的指出。 前言 在开发过程中,通常会遇到很多 一对一 数据的处理情况。而很多时候我们会要取到的是一个列表,然后列表的单条记录的对应另外一张表,来实现业务。比如下面的商品信息 和 商品详情 两个表,这里为了演示只是使用了基础...

    时飞 评论0 收藏0
  • PHP & MySQL 「数据关联一对一」的最佳实践

    摘要:前言在开发过程中,通常会遇到很多一对一数据的处理情况。关于可以看我的另一篇文章多维数组中的。最佳实践这一次,我们用到了其他两个函数。勘误感谢评论区对文章内容错误之处的指出。 前言 在开发过程中,通常会遇到很多 一对一 数据的处理情况。而很多时候我们会要取到的是一个列表,然后列表的单条记录的对应另外一张表,来实现业务。比如下面的商品信息 和 商品详情 两个表,这里为了演示只是使用了基础...

    mudiyouyou 评论0 收藏0
  • Mysql 架构及优化之-数据类型优化

    摘要:数据类型整数数字类型整数和实数数字表示对应最大存储位数如表示不允许负数则范围为常规数据库中只是表示控制显示字符的个数是个和存储和计算是一样的即照样可以存储位数实数实数有分数部分和类型支持使用标准的浮点运算近似计算占用个字节占用个 数据类型 整数 数字类型:整数和实数 tinyint(8) smallint(16) mediuint(24) int(32) bigint(64) 数...

    joyqi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<