前奏曲
- 私の質問は、「クライアントとサーバー間で実際に送信できる最大値は、使用可能なメモリの量と通信バッファーのサイズによって決まります」を無視しています。
- ここでは 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つがそうであると仮定します。)