首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL varchar与IBM DB2 varchar数据的比较

问MySQL varchar与IBM DB2 varchar数据的比较
EN

Stack Overflow用户
提问于 2012-01-18 08:26:45
回答 1查看 1K关注 0票数 0

我对MySQL varchar数据类型有一个小小的疑问。我们都知道。

char是一个固定长度的数据类型.因此,char值的存储大小等于列的最大大小。但是,在"varchar“的情况下,它是一个可变长度的数据类型,因此,varchar值的存储大小是输入数据的实际长度,而不是该列的最大大小。这就是为什么,当varchar需要存储字符/文本类型的数据并保存未使用的内存以供将来使用时,它通常会更多地使用。

最近我知道..。如果您在表的其余列中间使用任何DB2列,则该特定列中字符的存储大小等于varchar列的原始大小。

例:如果在一个表中有三列像这样:

char(50)

  • lastName:
  1. firstName : varchar(50)
  2. emailId : char(50)

因此,如果您想要将此文本( 'Majhi‘)存储到颜色为"lastName“的数据类型的varchar(50)中,那么它将使用完整的50 5chars存储大小,而不是只使用实际大小的5 5chars,即actuall文本的实际大小( 'Majhi’)。

这就是为什么在IBM中,包括任何varchar数据类型的DB2,表中其余颜色中的coloumn也与char数据类型相同。因此,内存优化不会发生。

所以,我只想知道我们的MySQL是否以同样的方式工作,或者它不区分varchar数据颜色在哪里存在,并相应地工作,因为varchar数据类型列需要工作。

EN

回答 1

Stack Overflow用户

发布于 2012-01-18 10:07:16

这里有两个方面。

第一个是磁盘上的存储.在这种情况下,每一行只存储了所需的数据,如果在varchar之后还有其他列,这就不重要了。

第二个是加载到内存中的表。在这种情况下,MySQL在内部将VARCHAR(n)转换为CHAR(m)1,其中m是给定列中数据的最大长度。因此,如果您的列声明为VARCHAR(60),但其中存储的最长字符串的长度为10,则内存中的字段将具有固定的10长度。这在最小化内存占用和最大限度地提高数据访问性能之间达成了折衷(如果您知道特定列的起始位置,那么获取它就更容易了)。

他说:这里有点简单化。它实际上不是CHAR或任何其他MySQL数据类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8907140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档