mysql – 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)之间有什么区别吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)之间有什么区别吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2055字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)之间有什么区别吗?](/upload/InfoBanner/zyjiaocheng/910/b67afbaf287d4ad18d68c9a40c3c5d81.jpg)
我理解char和varchar之间的区别,但我不确定varchar最大长度的确切含义.
当我们存储长度小于10的字符串时,varchar(10)和varchar(100)之间有什么区别吗?
我认为两种情况都使用相同的空间并具有相同的性能.如果是这样,为什么我们需要varchar max limit?
只使用“varchar”而不是“varchar(xxx)”就足够了吗?
(补充)我正在使用MySQL 5.0.67
解决方法:
这完全取决于所使用的DBMS引擎. SQL本身并没有强制要求物理存储的方式,而是逻辑上如何存储它们.
例如,您的DBMS可以在行中分配最大大小的空间,以及一些额外的字节来存储长度.在这种情况下,varchar(10)和varchar(1000)之间会有很大的不同,因为每行会浪费相当多的空间.
或者,它可以使用缓冲池作为varchar数据,并仅在行中存储长度和缓冲池“起始地址”.在这种情况下,每个行都会为varchar列存储大小相同的信息,而不管其大小如何,但是会有一个额外的步骤来提取该列中的实际数据(在链接到缓冲池之后).
您使用varchar的原因正是它命名为varchar的原因.它允许您存储可变大小的数据元素.通常情况下,char(10)会为您提供十个字符,无论如何,如果您插入更短的内容,请使用空格填充它.您可以在提取时修剪尾随空格,但如果要存储的数据实际上是“hello”,并且需要保留尾随空格,则无法正常工作.
一个不错的DBMS引擎可能决定根据varchar列的最大大小进行权衡.对于简短的,它可以将其内联存储在行中并消耗大小的额外字节.
较长的varchar列可以“外包”到单独的缓冲池中,以确保行读取保持有效(至少在您需要大型varchar列之前).
您需要做的是重新询问您的特定DBMS的问题,以便获得更有针对性的答案.
或者,说实话,设计您的数据库只存储最大尺寸.如果你知道它是10,那么varchar(1000)就是浪费.如果将来需要扩大列,那就是时间了,而不是现在(见YAGNI).
对于MySQL,您需要查看在线文档的Chapter 14 Storage Engines.
它涵盖了MySQL使用的各种存储引擎(如InnoDB和MyISAM),并且看起来足够深入,您可以看到信息的物理存储方式.
例如,在MyISAM中,表中存在可变长度数据(包括varchar)通常意味着dynamic tables.这遵循一个大致类似于我上面提到的缓冲池概念的方案,其优点是可变大小的列浪费的空间更少,以及行可能变得支离破碎的缺点.
另一种存储格式(折扣压缩格式,因为它仅用于只读表)是static one,其中数据存储在单个物理行中.
有关InnoDB物理结构的信息可以在here找到.根据您是使用Antelope还是Barracuda文件格式,您最终会得到“所有信息是物理行”或“缓冲池”的情况,类似于MyISAM之间的区别动态和静态.
内容总结
以上是互联网集市为您收集整理的mysql – 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)之间有什么区别吗?全部内容,希望文章能够帮你解决mysql – 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)之间有什么区别吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。