2009-08-03 4 views
4

VARCHAR(256)ではなくVARCHAR(255)が常に使用されていますが、VARCHAR(15)ではなくVARCHAR(16)が使用されています。これは私に矛盾しているようです。余分なバイトがVARCHARの長さを格納するために使用されている場合は、この規則は2,4-8のようなより小さい長さに1,3,5、7にも適用されるべきではないでしょうか?VARCHARS:2,4,8,16など?または1,3,7,15など?

何かが完全に欠けていますか?

言い換えれば、私が知っている数字が12を超えないことがわかったら、代わりにVARCHAR(15)またはVARCHAR(16)を使用するだけですか? VARCHAR(12)と同じ量の領域を使用するためですか?もしそうなら、どちらを使うのですか? 15または16?私が256に近づくと、このルールはまったく変わるのですか?

私は、プロジェクトによっては、MySQLとSQLの両方を使用します。

答えて

10

つまり、私が知っている数字が12を超えることはありません。代わりにVARCHAR(15)またはVARCHAR(16)を使用するだけですか?

いいえ!長さがかなり一定であれば、varchar(12)を使用してください(あるいはchar(12)も可能です)。

一部のシステムでは、一度にvarcharタイプが255文字に制限されていました(including MySql prior to 5.0.3)。格納されている最初のバイトがフィールドの長さを示したためです。この制限が与えられれば、妥当な量のテキストを許可したいと思っている開発者は、別のデータ型にするのではなく、255を選択します。

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

+0

ありがとうございました。みんなの答えは役に立ちましたが、私は1つを選択しなければなりませんでした。 – jedmao

+4

** @ geocar:**データベースロケールが正しく設定されている場合、 'VARCHAR(12)'は12文字を保持します。 ** VARCHAR'はロケールを意識しています** –

2

私はあなたが実際の長さをエンコードするために1つのバイトを使用する場合、あなただけの255

VARCHAR件までの長さを表現することができるので、元の問題は、いくつかのシステムのためのVARCHAR(...)は255に制限されていたということだと思います(16)/ VARCHAR(15)これは、これらの起源を連想させる可能性が最も高いですが、2つの値に特別なものはありません。

+3

プログラマーは「最適化している」と思っていたが、将来のプログラマーが意図したとおりに混乱してしまったため、15と16を見る理由が多いと思う。 – cdmckay

+1

LOLそれはまさに私が考えていたものです!そしてそれは働いた!それは私にこの問題について完全に混乱させました。ありがとう! – jedmao

4

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

従来、さまざまなDBMSのVARCHARの最大長は255文字でした。当時のLOB(ラージオブジェクト)ではないフィールドの長さ制限は、255バイト(1バイトのint)でした。最初のバイトはフィールドの長さ(0-255)を格納するために使用され、残りの文字はnバイトです。だからあなたはしばしばVARCHAR(255)を見るのです。

フィールドが12より大きくならない場合は、VARCHAR(12)を使用してください。

+0

これは255の理由は、フィールドの長さを格納するために最初のバイトを使用すると、その8ビットのバイトは0から255までの長さしか示すことができないからです。 –

+0

** @ Joel:**本当に、セマンティクスに入ります。私は私の答えを編集しました。 –

関連する問題