2

前奏曲

  • 私の質問は、「クライアントとサーバー間で実際に送信できる最大値は、使用可能なメモリの量と通信バッファーのサイズによって決まります」を無視しています。
  • ここでは Unicode も考慮していません。文字が 1 バイトを超えるストレージを使用する場合、TEXT 列の実際の最大長 (文字数) が減少することを認識しています。

ここでMySqlドキュメントを参照すると、 http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html、質問に対して2つの答えを導き出すことができます...

1) より明白な答え:

TINYBLOB   : 2 ^  8 - 1 = 255
BLOB       : 2 ^ 16 - 1 = 65535
MEDIUMBLOB : 2 ^ 24 - 1 = 16777215
LONGBLOB   : 2 ^ 32 - 1 = 4294967295

2) もう少し複雑な答え:

TINYBLOB   : 2 ^  8 - 1 = 255
BLOB       : 2 ^ 16 - 2 = 65534
MEDIUMBLOB : 2 ^ 24 - 3 = 16777213
LONGBLOB   : 2 ^ 32 - 4 = 4294967292

MySql は、実際のデータのサイズをそのデータと共に格納します。そのサイズを保存するには、次のものが必要です。

  • データが 256 B 未満の場合は 1 バイト
  • データが 64 KB 未満の場合は 2 バイト
  • データが 16 MB 未満の場合は 3 バイト
  • データが 4 GB 未満の場合は 4 バイト

したがって、データとデータのサイズを合わせて保存し、必要なストレージの 256 / 64K / 16M / 4G バイトを超えないようにするには、宣言された最大値を決定するときに -1 / -2 / -3 / -4 係数が必要になります。列の長さ (-1 / -1 / -1 / -1 ではありません)。これが理にかなっていることを願っています:)

質問

この2つの答えのうち、正しいのはどれ? (そのうちの1つがそうであると仮定します。)

4

1 に答える 1

2
于 2012-11-14T13:13:29.493 に答える