我对MySQL varchar数据类型有一个小小的疑问。我们都知道。
char是一个固定长度的数据类型.因此,char值的存储大小等于列的最大大小。但是,在"varchar“的情况下,它是一个可变长度的数据类型,因此,varchar值的存储大小是输入数据的实际长度,而不是该列的最大大小。这就是为什么,当varchar需要存储字符/文本类型的数据并保存未使用的内存以供将来使用时,它通常会更多地使用。
最近我知道..。如果您在表的其余列中间使用任何DB2列,则该特定列中字符的存储大小等于varchar列的原始大小。
例:如果在一个表中有三列像这样:
char(50)
因此,如果您想要将此文本( 'Majhi‘)存储到颜色为"lastName“的数据类型的varchar(50)中,那么它将使用完整的50 5chars存储大小,而不是只使用实际大小的5 5chars,即actuall文本的实际大小( 'Majhi’)。
这就是为什么在IBM中,包括任何varchar数据类型的DB2,表中其余颜色中的coloumn也与char数据类型相同。因此,内存优化不会发生。
所以,我只想知道我们的MySQL是否以同样的方式工作,或者它不区分varchar数据颜色在哪里存在,并相应地工作,因为varchar数据类型列需要工作。
发布于 2012-01-18 10:07:16
这里有两个方面。
第一个是磁盘上的存储.在这种情况下,每一行只存储了所需的数据,如果在varchar之后还有其他列,这就不重要了。
第二个是加载到内存中的表。在这种情况下,MySQL在内部将VARCHAR(n)转换为CHAR(m)1,其中m是给定列中数据的最大长度。因此,如果您的列声明为VARCHAR(60),但其中存储的最长字符串的长度为10,则内存中的字段将具有固定的10长度。这在最小化内存占用和最大限度地提高数据访问性能之间达成了折衷(如果您知道特定列的起始位置,那么获取它就更容易了)。
他说:这里有点简单化。它实际上不是CHAR或任何其他MySQL数据类型。
https://stackoverflow.com/questions/8907140
复制相似问题