2012-01-18 15 views
0

私は、varcharデータ型について疑問を抱きました。私たちは皆知っている。MySQL varcharとIBM DB2 varchar dataypeの比較

charは、固定長データ型です。したがって、char値の格納サイズは、列の最大サイズの と同じです。しかし、 "varchar"の場合は可変長データ型の ですので、varchar値の格納サイズはこの列の最大サイズではなく、入力されたデータの実際の長さです。だから、varcharは、文字/テキストの種類のデータを保存し、将来の使用のために未使用のメモリを保存する必要があるときに、一般的に使用されます。

最近私は、IBM DB2の場合、テーブルの残りの列の中間にvarchar列を使用すると、その特定の列の文字の格納サイズは、 varchar列のサイズ。

EX:

  1. のfirstName:CHAR(50)
  2. lastNameの:VARCHAR(50)
  3. EMAILID:CHAR(50)
が3列このような表の場合

これで、このテキスト( 'Majhi')をデータ型varchar(50)のcoloumn "lastName"に保存する場合、実際には5charsを取​​るのではなく、50chのストレージサイズを使用しますテキスト( 'マジ')。

これは、IBM DB2では、テーブルのcoloumnsの残りの中間にある任意のvarcharデータ型coloumnを含めて、charデータ型と同じように機能します。したがって、メモリの最適化は起こりません。

私たちのMySQLが同じように動作しているか、varchar dataype coloumnがどこに存在しているのか分かりません。したがって、varcharデータ型列が動作する必要があります。

+1

行の真ん中にフィールドがある場合、varchar(50)で50文字を使用して 'Mahji'を格納するという主張が正しくありません。実際の値は5バイト、文字列の長さは4バイトになります。列がNULL可能である場合、NULL標識のために1バイト以上が存在します。 –

答えて

2

ここには2つの側面があります。

最初はディスク上のストレージです。この場合、必要なだけ多くのデータが格納され、varcharの後に他の列があるかどうかは重要ではありません。

2番目のテーブルはメモリにロードされます。この場合、MySQLは内部的にVARCHAR(n)CHAR(m) [1]に変換します。ここで、mは指定された列のデータの最大長です。したがって、カラムがVARCHAR(60)と宣言されていて、その中に格納されている最長の文字列の長さが10の場合、メモリ内のフィールドは固定長の10になります。これは、メモリフットプリントの最小化とデータアクセスのパフォーマンスの最大化との間で妥協を招いています(特定の列が開始位置を知っていれば、それをフェッチする方が簡単です)。

[1]:ここで簡略化の種類。実際にはCHARやその他のMySQLデータ型ではありません。

+0

さらに考慮すべき点は、Unicodeです。バイト数は、ストレージとディスクの両方の文字数を超える場合があります。 – zarchasmpgmr

関連する問題