当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)有什么区别吗?

2024-01-08

我理解之间的区别char and varchar但我不确定的确切含义varchar最大长度.

当我们存储string长度小于10的有什么区别varchar(10) and varchar(100)?

我认为这两种情况都使用相同的空间并具有相同的性能。如果是这样,为什么我们需要 varchar 最大限制?

仅使用“就足够了吗?”varchar“ 代替 ”varchar(xxx)"?

(补充)我正在使用 MySQL 5.0.67


这完全取决于所使用的 DBMS 引擎。 SQL 本身并不规定事物如何物理存储,而只是规定它们如何逻辑地存储。

例如,您的 DBMS 可能会在行中分配最大大小的空间,再加上一些额外的字节来存储长度。那样的话,就会有很大的区别varchar(10) and varchar(1000)因为每行都会浪费相当多的空间。

或者,它可以使用缓冲池varchar数据并仅存储行中的长度和缓冲池“起始地址”。在这种情况下,每一行都将存储相同大小的信息varchar列,无论其大小如何,但都会有一个额外的步骤来提取该列中的实际数据(遵循到缓冲池的链接)。

您使用的原因varchar这正是它被命名的原因varchar。它允许您存储可变大小的数据元素。通常,char(10)无论如何,都会给您十个字符,如果您插入更短的内容,则用空格填充它。您可以在提取数据时修剪掉尾随空格,但如果您要存储的数据实际上是"hello ", with您想要保留的尾随空格。

一个好的 DBMS 引擎可能会根据数据库的最大大小进行权衡。varchar柱子。对于短的,它可以将其内联存储在行中并消耗额外的字节大小。

Longer varchar列可以“外包”到一个单独的缓冲池,以确保行读取保持高效(至少直到您need大的varchar专栏,无论如何)。

您需要做的是针对您的特定 DBMS 重新提出问题,以获得更有针对性的答案。

或者,老实说,将数据库设计为仅存储最大大小。如果你知道是 10,那么varchar(1000)是一种浪费。如果以后需要扩大栏目,that是时候做这件事了,而不是现在(参见YAGNI http://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it).


对于 MySQL,您需要查看Chapter 14 Storage Engines http://dev.mysql.com/doc/refman/5.7/en/storage-engines.html的在线文档。

它涵盖了 MySQL 使用的各种存储引擎(例如 InnoDB 和 MyISAM),并且深入观察,您可以看到信息是如何物理存储的。

例如,在 MyISAM 中,表中存在可变长度数据(varchar包括)通常意味着动态表 http://dev.mysql.com/doc/refman/5.7/en/dynamic-format.html。这遵循的方案大致类似于我上面提到的缓冲池概念,优点是可变大小的列浪费的空间更少,缺点是行可能会碎片化。

另一种存储格式(不考虑压缩格式,因为它仅真正用于只读表)是静态一 http://dev.mysql.com/doc/refman/5.7/en/static-format.html,其中数据存储在单个物理行中。

有关InnoDB物理结构的信息可以找到here http://dev.mysql.com/doc/refman/5.7/en/innodb-table-and-index.html。根据您使用的是Antelope还是Barracuda文件格式,您最终会遇到“所有信息都是物理行”或“缓冲池”的情况,类似于MyISAM动态和静态的区别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)有什么区别吗? 的相关文章

随机推荐

  • 如何使用 Ruamel.yaml 在某些数据之前添加空行

    我似乎无法弄清楚如何使用 Ruamel yaml 在数据之间添加空行 假设我有数据 a 1 b 2 我需要添加到此 以便我将 a 1 b 2 c 3 据我所知 空行是作为 CommentToken 实现的 Comment comment N
  • IE 权限被拒绝

    我在 IE 上收到权限被拒绝的错误 firefox 工作正常 我正在进行 ajax 调用 本地域 并将调用结果分配给 div 在调试时 我发现 ajax 调用没有问题 并且变量 结果 具有结果数据 将数据分配给 div 时会引发错误 Err
  • pageshow/pagehide 事件未触发

    我碰到pageshow pagehide事件 但我不太确定它们是如何工作的 我将它们注册在document 以及稍后window反对 但他们从未开枪 我预计它们会在页面加载后触发pageshow 当我转到其他页面时pagehide 但这从未
  • 如何更改 Angular Material CdkDroplist 行为以模拟“自由”放置区?

    目标是创建一个全宽拖放区 我可以在其中放置 小部件 并在放置区周围自由拖动它们 但不同的是 我还可以删除列表小部件 其中我也可以删除其他小部件 所以我有这个堆栈闪电战 https stackblitz com edit angular fr
  • Android 版 Google plus:凭据无效

    我使用以下代码来获取访问令牌 在连接到 Google 后 获取个人资料信息和电子邮件 String sAccessToken GoogleAuthUtil getToken this mPlusClient getAccountName o
  • Web 表单脚手架而不是 MVC

    可以使用 Web 表单代码搭建脚手架吗 thanks ASP NET 动态数据 http www asp net dynamicdata是一个应该与 Web 表单和 MVC 一起使用的脚手架解决方案
  • C# 中浮点和双精度数据类型的实际范围是多少?

    我正在学习 C 并试图获得 C 中数据类型实际范围的逻辑视觉表示 我已经介绍了整数 现在介绍了浮点和双精度数据类型 8 位 1 字节 sbyte 128 到 127 8 位 1 字节 字节 0 到 255 16 位 2 字节 短 32 76
  • Safari 6 中未设置 Cookie

    晚上好 这个问题我已经问过几次了 没有得到答复 希望这次一切顺利 我使用 php 和 Facebook PHP SDK 开发 Facebook 应用程序已经有几年了 最近我一直在为 Safari 和 Facebook 的登录而烦恼 问题是
  • dc.js 带复选框的多选菜单

    我有一个数据集 其中包含 5 列 gt 国家 地区 ID 值和部门 我能够使用值和国家 地区在 dc js 中创建行图 其中国家 地区是我的维度 var rowChart dc rowChart rowChart d3 csv data c
  • g++ 错误:“malloc”未在此范围内声明

    我在 Fedora 下使用 g 编译 openGL 项目 其中包含以下行 textureImage GLubyte malloc sizeof GLubyte RESOURCE LENGTH 编译时 g 错误提示 error malloc
  • 修剪字符串中的最后一个字符

    我有一个字符串说 Hello world 我想做一个修剪或移除以取出 关世界但不关你好 Hello world TrimEnd 阅读更多 https msdn microsoft com en us library 64zz6w66 v v
  • JScrollPane 中的 JTable 具有可调整大小的 JFrame 固定大小?

    我有一个JTable里面的一个JScrollPane 我想让列在调整大小时保持固定 行保持相同的大小 并且有一个滚动条可以上下移动 但我无法让滚动条在垂直方向上以相同的方式工作 这是我的项目的图片 其中 Duke 的 y 轴完全正常 并且有
  • Haskell - Foldl 和 Foldr?

    之间的区别是foldl and foldr只是循环的方向 我认为他们所做的事情有所不同 而不仅仅是方向上的不同 如果您的函数不具有关联性 即 用括号括起表达式的方式很重要 则存在差异 例如 foldr 0 1 10 5 but foldl
  • java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest

    我正在通过多部分过滤器处理文件上传 如下所述here http balusc blogspot com 2007 11 multipartfilter html 我创建了一个 WAR 文件并部署在 Weblogic 10 3 3 服务器上并
  • window.location 与 just location

    在网络上 我看到大量 JavaScript 程序员在编写window location而不仅仅是location 我很好奇是否有人可以解释原因 window是全局对象 因此没有必要包含 不是吗 我的意思是 你看不到人们写window Mat
  • 允许 Firebase Analytics 域名而不允许其他 Google 服务

    我有一个应用程序 旨在在防火墙后面的内部网络内使用 需要为此应用程序启用 Firebase Analytics 并且网络管理员需要允许 Firebase 端点而不允许所有 Google 服务 到目前为止我才知道我需要允许 firebase
  • 我可以在调用纯虚函数时禁用异常吗?

    我有一些代码看起来像这样 class Writable public virtual void putc const char ch 0 protected virtual Writable class Readable public vi
  • 尝试添加强类型视图在 MVC 项目中找不到任何类

    我有一个非常奇怪的问题 每当我尝试在 ASP NET MVC2 中使用 添加视图 对话框 然后尝试通过从可用类的下拉列表中选择 视图数据类 来 创建强类型视图 时 没有任何类 模型 在我的 MVC 项目中出现了 非常奇怪的部分是我的 MVC
  • 如何在 KeyDown 中确定 Shift + Tab 被按下

    How can I determine in KeyDown that Tab was pressed private void DateTimePicker BirthDate KeyDown object sender KeyEvent
  • 当我们存储长度小于10的字符串时,varchar(10)和varchar(1000)有什么区别吗?

    我理解之间的区别char and varchar但我不确定的确切含义varchar最大长度 当我们存储string长度小于10的有什么区别varchar 10 and varchar 100 我认为这两种情况都使用相同的空间并具有相同的性能