MySQL 的 string type 和 storage size 關係

本文有錯請指正。


以下 storage size 指的是實際儲存的空間,不是用 select length() 拿出來的資訊。

In the following table, M represents the declared column length in characters for non-binary string types and bytes for binary string types. L represents the actual length in bytes of a given string value.

型態: CHAR(M)
需要的空間: M × w bytes, 0 <= M <= 255, M 是定義好的字數,至多存 255 個字,w 是目前使用編碼的 byte 數,例如 utf8 就是 3 bytes (或 2 bytes) 。

型態: BINARY(M)
需要的空間: M bytes, 0 <= M <= 255

型態: VARCHAR(M), VARBINARY(M)
需要的空間:
L + 1 bytes if column values require 0 − 255 bytes,
L + 2 bytes if values may require more than 255 bytes

型態: TINYBLOB, TINYTEXT
需要的空間: L + 1 bytes, 當 L < 2^8

型態: BLOB, TEXT
需要的空間: L + 2 bytes, 當 L < 2^16

型態: MEDIUMBLOB, MEDIUMTEXT
需要的空間: L + 3 bytes, 當 L < 2^24

型態: LONGBLOB, LONGTEXT
需要的空間: L + 4 bytes, 當 L < 2^32

型態: ENUM(‘value1′,’value2’,…)
需要的空間: 1 or 2 bytes, 看有幾個 ENUM 的值而定,最多 65,535 個。

型態: SET(‘value1′,’value2’,…)
需要的空間: 1, 2, 3, 4, or 8 bytes, 看 SET 內有多少 member ,最多 64 個。

Leave a Reply

Your email address will not be published.