質問

VARCHAR(256)の代わりにVARCHAR(255)が常に使用されていますが、VARCHAR(15)の代わりにVARCHAR(16)が使用されています。これは私には矛盾しているようです。 VARCHARの長さを格納するために余分なバイトが使用されている場合、このルールは2、4、8などの小さい長さに適用して、代わりに1、3、7にすべきではありませんか?

または、何かが完全に欠落していますか?

言い換えれば、12を超えないことがわかっている数値がある場合、代わりにVARCHAR(15)またはVARCHAR(16)を使用する必要がありますか? VARCHAR(12)と同じ量のスペースを使用するためですか?その場合、どれを使用しますか? 15または16? 256に近づくと、このルールはまったく変わりますか?

プロジェクトに応じて、MySQLとSQLの両方を使用します。

役に立ちましたか?

解決

  

つまり、12を超えないことがわかっている番号がある場合、代わりにVARCHAR(15)またはVARCHAR(16)を使用する必要がありますか?

いいえ! varchar(12)を使用します(長さがほぼ一定の場合はchar(12)を使用することもできます)。

かつて、システムによってはvarchar型が255文字に制限されていました( 5.0.3より前のMySqlを含む)。最初に保存されたバイトがフィールドの長さを示していたため。この制限を考慮すると、妥当な量のテキストを許可したい開発者は、異なるデータ型に完全に移動するのではなく、255を選択します。

ただし、データのサイズがわかっている場合は、データベースにそのサイズを正確に使用してください。

他のヒント

奇数または偶数とは関係ありません。

歴史的に、255文字は多くの場合、さまざまなDBMSの VARCHAR の最大長でした。当時 LOB (ラージオブジェクト)でなかったフィールドの長さの制限は255バイト(1バイトint)でした。したがって、最初のバイトはフィールドの長さ(0〜255)を格納するために使用され、残りの n バイトは文字に使用されます。そのため、 VARCHAR(255)がよく表示されます。

フィールドが12を超えない場合は、 VARCHAR(12)を使用します。

元の問題は、一部のシステムではVARCHAR(...)が255に制限されていたためだと思います。1バイトを使用して実際の長さをエンコードすると、255までの長さしか表現できないためです。

VARCHAR(16)/ VARCHAR(15)これらの起源を連想させる可能性が高いですが、2つの値には特別なものはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top