1. カラムタイプのストレージ要件
MySQL でサポートされている各カラムタイプのストレージ要件がカテゴリ別にリストされています。
MyISAM テーブルの行の最大サイズは 65,534 バイトです。各 BLOB 列と TEXT 列は、そのうちの 5 ~ 9 バイトのみを占めます。
MyISAM テーブルに可変長の列タイプが含まれる場合、レコード形式も可変長になります。テーブルを作成するとき、MySQL は特定の条件下でカラムを可変長タイプから固定長タイプに、またはその逆に変更できます。
数値型のストレージ要件
列の型 |
ストレージ要件 |
TINYINT |
1バイト |
SMALLINT |
2バイト |
MEDIUMINT |
3バイト |
INT、INTEGER |
4バイト |
BIGINT |
8バイト |
FLOAT(p) |
if 0 <= p <= 25 の場合、24 は 4 バイトです<= p <= 53 は 8 バイト |
FLOAT |
4 バイト |
DOUBLE [PRECISION]、項目 REAL | 8 バイト |
DECIMAL(M) 、D )、NUMERIC(M,D) |
変数; 以下の説明を参照 |
BIT(M) | およそ(M+7)/8バイト |
D ECIMAL (そしてNUMERIC) のストレージ要件はバージョン固有です:
バイナリ形式を使用して、9 個の 10 進数 (10 ベース) を 4 バイトに圧縮し、DECIMAL 列の値を表します。各値の整数部と小数部の格納方法は個別に決定されます。 9 桁の各倍数には 4 バイトが必要で、「残りの」ビットには 4 バイトの一部が必要です。次の表は、ビットを超えるストレージ要件を示しています。
0
0
1 |
1
|
2
1
|
32 |
4 |
2 |
5 |
3 |
6 |
3 |
7 | 4 |
8 |
4 |
9 |
4 |
|
日付と時刻の型の記憶域要件 |
|
| 列の型
| ストレージ要件 |
日付 |
3バイト |
DATETIME
8バイト
TIMESTAMP
4バイト
|
TIME3バイト |
YEAR | 1バイト |
| String型ストレージ要件 |
|
列タイプ |
ストレージ要件 |
|
CHAR(M | ) |
Mバイト、0 M & lt;= 255
VARCHAR(M)
L | +1バイト、ここでL M
| および0 M
)
L | +1バイト、ここでL M and 0 M
|
TINYBLOB、TINYTEXT |
L+1 文字セクション、そのうち L 8
| ブロブ、 TEXT
L+2バイト、うちL | 16MEDIUMBLOB、MEDIUM TEXT
L+3バイト、うちL | 24 LONGBLOB、LONGTEXTL+4バイト、うち
L 32
ENUM('value1','value2 | ',...)
列挙値の数に応じて 1 バイトまたは 2 バイト (最大 65,535 個の値) |
SET('value1 ','value2',...)
| 1, 2, 3,セットメンバーの数に応じて 4 バイトまたは 8 バイト (最大 64 メンバー)
|
VARCHAR、BLOB、TEXT クラスは可変長型です。各型のストレージ要件は、型の最大可能サイズではなく、列値の実際の長さ (前の表では L で示されています) によって異なります。たとえば、VARCHAR(10) 列には、最大長 10 の文字列を保持できます。実際のストレージ要件は、文字列の長さ (L) に、文字列の長さを記録するバイトを加えたものです。文字列「abcd」の場合、Lは 4 で、ストレージには 5 バイトが必要です。
CHAR、VARCHAR、TEXT 型の場合、前の表の値 L と M は文字数として解釈される必要があり、列定義内のこれらの型の長さは文字数を表します。たとえば、TINYTEXT 値を保存するには、L 文字 + 1 バイトが必要です。
特定の CHAR、VARCHAR、または TEXT 列の値を格納するために使用されるバイト数を計算するには、その列で使用されている文字セットを考慮する必要があります。特定のケースでは、Unicode を使用する場合、すべての Unicode 文字が同じバイト数を使用することに留意する必要があります。
注: VARCHAR 列の有効な最大長は 65,532 文字です。
NDBCLUSTER エンジンは固定幅の列のみをサポートします。これは、MySQL Cluster のテーブル内の VARCHAR カラムが CHAR 型のように動作することを意味します (ただし、各レコードにはまだ余分なバイトのスペースが残っています)。たとえば、Cluster テーブルでは、VARCHAR(100) として宣言された列の各 レコードは、実際に格納されるレコードの文字列の長さに関係なく、格納時に 101 バイトを占有します。
BLOB クラスと TEXT クラスでは、クラスの最大可能長に応じて、列値の長さを記録するために 1、2、3、または 4 バイトが必要です。 NDB Cluster ストレージ エンジンでは、TEXT 列と BLOB 列の実装が異なり、TEXT 列の各レコードは 2 つの別個の部分で構成されます。 1 つは固定サイズ (256 バイト) で、実際には元のテーブルに保存されます。もう 1 つは、暗黙的なテーブルに保持される 256 バイトを超えるデータを含みます。 2 番目のテーブルのレコードの長さは常に 2,000 バイトです。これは、sizesize はレコードのサイズを表します)、それ以外の場合、サイズは 256 +size+(2000–(size) であることを示しています。 –256)%2000 )。
ENUM オブジェクトのサイズは、異なる列挙値の数によって決まります。列挙には 1 バイトが使用され、255 個の可能な値を含めることができます。列挙値が 256 ~ 65,535 の場合、2 バイトが使用されます。 SET オブジェクトのサイズは、異なるセット メンバーの数によって決まります。設定されたサイズが N の場合、オブジェクトは (N+7)/8 バイトを占め、1、2、3、4、または 8 バイトに切り上げられます。 SET には最大 64 のメンバーを含めることができます。
2. 正しいデータ型を選択します ストレージを最適化するには、どのような場合でも最も正確な型を使用する必要があります。たとえば、列の値の範囲が 1 ~ 99999 の場合、整数を使用する場合は MEDIUMINT UNSIGNED が適切な型です。この型は、列値を表すことができるすべての型の中で最も少ないストレージを使用します。 DECIMAL 列のすべての基本的な計算 (+、-、、/) を、10 進数 65 桁 (10 を基準) の精度で実行します。 倍精度演算を使用して、DECIMAL 値の計算を実行します。精度をあまり重視しない場合、または速度を最優先する場合は、DOUBLE タイプで十分です。高精度を実現するために、BIGINT に格納されている固定小数点型への変換を実行できます。これにより、すべての計算を 64 ビット整数で実行できるようになり、必要に応じて結果を浮動小数点値に変換し直すことができます。 3. 他のデータベース エンジンのカラム タイプを使用する他のベンダーによって作成された SQL 実行コードを使用するために、MySQL は次の表に示すようにカラム タイプをマップします。テーブル定義は、次のマッピングを通じて他のデータベース エンジンから MySQL に簡単にインポートできます:
その他の販売者タイプ
|
MySQL タイプ
|
BOOL、 | TINYINT |
BOOLEAN | TINYINT |
CHAR VARYING(M)
| VARCHAR(M)
|
DEC | DECIMAL |
FIXED | DECIMAL |
FLOAT4 | FLOAT |
FLOAT8 | DOUBLE |
INT1 | TINYINT |
INT2 | SMALLINT |
INT3 | MEDIUMINT |
INT4 | INT |
INT8 | BIGINT |
LONG VARBINARY | MEDIUMBLOB |
LONG VARCHAR | MEDIUMTEXT |
LONG | MEDIUMTEXT |
MIDDLEINT | MEDIUMINT |
NUMERIC | D ECIMAL |
テーブルの作成時に列の型をマップしてから、元の型定義をマッピングします。は破棄されます。別のベンダーのタイプを使用してテーブルを作成し、DESCRIBE tbl_name ステートメントを実行すると、MySQL は同等の MySQL タイプを使用してテーブルの構造をレポートします。例:
mysql> CREATE TABLE t (a BOOL, b FLOAT8, c LONG, d NUMERIC);Query OK, 0 rows affected (0.08 sec)
mysql> DESCRIBE t;+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| a | tinyint(1) | YES | | NULL | |
| b | double | YES | | NULL | |
| c | mediumtext | YES | | NULL | |
| d | decimal(10,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
ログイン後にコピー
上記は MySQL の基本チュートリアル 4 - データ型のストレージ要件と正しい型の選択方法です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。