比较MySQL varchar和IBM DB2 varchar数据类型

时间:2012-01-18 08:26:46

标签: mysql db2 varchar

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

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

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

EX:如果在表中有3列如下:

  1. firstName:char(50)
  2. lastName:varchar(50)
  3. emailId:char(50)
  4. 所以,现在如果你想将这个文本('Majhi')存储到coloumn“lastName”数据类型varchar(50)中,那么它将占用50char的存储大小,而不是只采用5chars,这就是实际文本的实际大小('Majhi')。

    这就是为什么,在IBM DB2中包含任何varchar数据类型coloumn,其余表格中间的coloumns也可以与char数据类型一样工作。因此,内存优化不会发生。

    所以,我只是想知道我们的MySQL是否以相同的方式工作,或者它没有区分varchar dataype coloumn存在的位置,因此varchar数据类型列需要工作。< / p>

1 个答案:

答案 0 :(得分:2)

这里有两个方面。

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

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

[1]:这里有一种简化。它实际上不是CHAR或任何其他MySQL数据类型。