top
Loading...
11.5.列類型存儲需求
11.5. 列類型存儲需求

根據類別列出了MySQL支持的每個列類型的存儲需求。

MyISAM表中行的最大大小為65,534字節。每個BLOBTEXT列 賬戶只占其中的59個字節。

如果MyISAM表包括變長列類型,記錄格式也是可變長度。當創建表時,在某些條件下,MySQL可以將一個列從變長類型改為固定長度的類型或反之亦然。詳細信息參見13.1.5.1節,“沉寂的列規格變更”。

數值類型存儲需求

列類型

存儲需求

TINYINT

1個字節

SMALLINT

2個字節

MEDIUMINT

3個字節

INT, INTEGER

4個字節

BIGINT

8個字節

FLOAT(p)

如果0 <= p <= 244個字節, 如果25 <= p <= 538個字節

FLOAT

4個字節

DOUBLE [PRECISION], item REAL

8個字節

DECIMAL(M,D), NUMERIC(M,D)

變長;參見下面的討論

BIT(M)

大約(M+7)/8個字節

DECIMAL(NUMERIC)的存儲需求與具體版本有關:

使用二進制格式將9個十進制(基于10)數壓縮為4個字節來表示DECIMAL列值。每個值的整數和分數部分的存儲分別確定。每個9位數的倍數需要4個字節,并且“剩余的”位需要4個字節的一部分。下表給出了超出位數的存儲需求:

剩余的

字節

位數

數目

0

0

1

1

2

1

3

2

4

2

5

3

6

3

7

4

8

4

9

4

日期和時間類型的存儲需求

列類型

存儲需求

DATE

3個字節

DATETIME

8個字節

TIMESTAMP

4個字節

TIME

3個字節

YEAR

1個字節

字符串類型的存儲需求

列類型

存儲需求

CHAR(M)

M個字節,0 <= M <= 255

VARCHAR(M)

L+1個字節,其中L <= M 0 <= M <= 65535(參見下面的注釋)

BINARY(M)

M個字節,0 <= M <= 255

VARBINARY(M)

L+1個字節,其中L <= M 0 <= M <= 255

TINYBLOB, TINYTEXT

L+1個字節,其中L < 28

BLOB, TEXT

L+2個字節,其中L < 216

MEDIUMBLOB, MEDIUMTEXT

L+3個字節,其中L < 224

LONGBLOB, LONGTEXT

L+4個字節,其中L < 232

ENUM('value1','value2',...)

12個字節,取決于枚舉值的個數(最多65,535個值)

SET('value1','value2',...)

1234或者8個字節,取決于set成員的數目(最多64個成員)

VARCHARBLOBTEXT類是變長類型。每個類型的存儲需求取決于列值的實際長度(用前面的表中的L表示),而不是該類型的最大可能的大小。例如,VARCHAR(10)列可以容納最大長度為10的字符串。實際存儲需求是字符串(L)的長度,加上一個記錄字符串長度的字節。對于字符串'abcd'L4,存儲需要5個字節。

對于CHARVARCHARTEXT類型,前面的表中的值LM應解釋為字符數目,并且列定義中的這些類型的長度表示字符數目。例如,要想保存一個TINYTEXT值需要L字符+ 1個字節。

要想計算用于保存具體CHARVARCHAR或者TEXT列值的字節數,需要考慮該列使用的字符集。在具體情況中,當使用Unicode時,必須記住所有Unicode字符使用相同的字節數。為了細分用于不同類Unicode字符使用的存儲,參見10.5節,“Unicode支持”。

注釋:VARCHAR列的有效最大長度為65,532字符。

NDBCLUSTER引擎只支持固定寬度的列。這說明MySQL簇中的表中的VARCHAR列的行為如同類型CHAR(不同的是每個記錄仍然有一個額外字節空間)。例如,在Cluster表中,聲明為VARCHAR(100)的列中的每個記錄存儲時將占用101個字節,無論實際存儲的記錄中的字符串的長度為多少。

BLOBTEXT類需要 123或者4個字節來記錄列值的長度,取決于該類的最大可能的長度。參見11.4.3節,“BLOB和TEXT類型”。

NDB Cluster存儲引擎中,TEXTBLOB列的實施是不同的,其中TEXT列中的每個記錄由兩個單獨部分組成。一個是固定大小(256字節),并且實際上保存在原表中。另一個包括超出256字節的任何數據,保存在隱含的表中。第2個表中的記錄總是2,000字節長。這說明如果size<= 256TEXT列的大小為256(其中size表示記錄的大小);否則,大小是256 +size+(2000(size256)%2000)

ENUM對象的大小由不同的枚舉值的數目確定。枚舉用一個字節,可以有255個可能的值。當枚舉的值位于25665,535之間時,用兩個字節。參見11.4.4節,“ENUM類型”。

SET對象的大小由不同的set成員的數量確定。如果set大小是N,對象占(N+7)/8個字節,四舍五入到1234或者8個字節。SET最多可以有64個成員。參見11.4.5節,“SET類型”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/column-types.html
北斗有巢氏 有巢氏北斗