mysql char,varchar和十进制字节大小

时间:2018-09-23 09:00:39

标签: mysql varchar

我正在阅读mysql documentation上有关不同数据类型的字节大小,但是在使用char,varchar和decimal时有点困惑。

有人可以帮忙解释这三种数据类型的字节,还可以回答以下几种字节:

char(7)
varchar(9)
decimal(15,2)
decimal(11,6)

谢谢

1 个答案:

答案 0 :(得分:1)

CHAR(N)可能是最令人困惑的,因为char不是跨字符集的固定字节大小。此外,不同的行格式以不同的方式处理此问题。简而言之,如果您使用的是ROW_FORMAT = COMPACT,ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED,则CHAR(N)至少反转N个字节以实现就地更新而不会产生碎片。如果由于不同的字符编码而需要的字节更多,则将在必要时使用更多字节,并尝试使用尽可能少的字节,并且使用的字符长度不得超过最大字符字节长度*N。如果使用ROW_FORMAT = REDUNDANT,则CHAR(N)始终使用最大字符字节长度* N。

VARCHAR(N)和VARBINARY(N)设置每N列的最大字符长度。在N以下,MySQL使用给定的字符串和字符编码来提供所需的字节数。然后,如果字符串小于256个字节,MySQL将使用另外一个字节来记录字符串的长度。如果字符串的长度大于255个字节,则它使用2个字节来记录字符串的长度。 VAR列的存储效率很高,但是对于频繁更新的字符串列,可以通过使用固定长度的列(例如BINARY)来交换存储以提高性能。

DECIMAL 描述很容易说明: “ DECIMAL(和NUMERIC)列的值使用二进制格式表示,该格式将九个十进制(基数10)数字打包为四个字节。每个值的整数和小数部分的存储分别确定。九个数字的每个倍数需要四个字节,“剩余”数字需要四个字节的一部分。下表中给出了多余数字所需的存储空间。