当我们存储长度小于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)有什么区别吗? 的相关文章

  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • PHP PDO 使用 bindParam 第一个参数(不带冒号)[重复]

    这个问题在这里已经有答案了 请检查这个 user id int GET user id sql DELETE FROM users WHERE user id user id query db gt prepare sql query gt
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 每月获取记录,但如果该月没有记录,则为零

    如果我有以下 SQL 表 Tests id type receiveDate 1 Blood 2012 01 18 2 Blood 2012 01 20 3 Blood 2012 01 18 4 Blood 2012 03 01 5 Blo
  • 屏蔽字符串

    我需要将收到的字符串放入以下格式 在打字稿 javascript中 Eg 12 34 56 789 我知道有string mask以及通过 JQuery 的某种方式 有没有更简单的方法来做到这一点 您可以用所需的数据替换每个模式部分 fun
  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L
  • 在 Hibernate 中创建 UPDATE RETURNING 查询

    在 Oracle 中 我们可以创建一个更新查询 该查询将使用 RETURNING 子句返回更新的记录 Hibernate中有类似的功能吗 除了数据库生成的值之外 Hibernate 显然不需要返回更新的实例 因为对象传递给Session s
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 数据库字段中的逗号分隔值

    我有一个产品表 该表中的每一行对应一个产品 并由唯一的 ID 标识 现在 每个产品都可以有多个与该产品关联的 代码 例如 Id Code 0001 IN ON ME OH 0002 ON VI AC ZO 0003 QA PS OO ME
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • SQLite中的ROWID是自动设置的吗?

    所以 我在 Ionic 上有这个应用程序 它使用SQLite ngCordova 插件 https github com litehelpers Cordova sqlite storage用于内部存储 在其上 我使用以下命令创建一个表 d
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • 如何通过Elasticsearch模糊匹配电子邮件或电话?

    我想通过 Elasticsearch 对电子邮件或电话进行模糊匹配 例如 匹配所有以以下结尾的电子邮件 gmail com or 匹配所有电话开头136 我知道我可以使用通配符 query wildcard email gmail com
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • MYSQL - 使用逗号分隔字符串作为变量输入的存储过程

    我希望有人能够提供帮助 我已经创建了我的第一个存储过程 没什么花哨的 但是我遇到了问题 我想给它一个字符串输入 例如 1 2 3 4 5 然后它执行一个简单的操作SELECT FROM TABLE WHERE EAN IN VAR 所以存储
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla

随机推荐

  • 如何使用 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 我认为这两种情况都使用相同的空间并具有相同的性能