web-dev-qa-db-ja.com

VARCHARに長さの指定が必要なのはなぜですか?

なぜ単にVARCHARの代わりにVARCHAR(length)を指定する必要があるのですか?とにかく動的です。

UPD:必須であるという事実に特に困惑しています(たとえば、MySQLで)。

52
Fixpoint

VARCHARの「長さ」はコンテンツの長さではなく、コンテンツの最大長です。

VARCHARの最大長は動的ではなく、固定されているため、指定する必要があります。

最大サイズを定義したくない場合は、VARCHAR(MAX)を使用します。

32
Robin Day

まず、すべてのデータベースで必要なわけではありません。 SQL Server を見てください。オプションです。

とにかく、フィールドのコンテンツの最大サイズを定義します。それ自体は悪いことではなく、意味を伝えます(たとえば、フィールドに国際番号が必要ない場合の電話番号)。

13
Oded

データの制約として見ることができます。制約に違反するデータを保存しないようにします。概念的には、たとえば正の値のみが入力されることを保証する整数列のチェック制約。

データベースが保存しているデータについて知っているほど、リクエストを使用してデータを検索/追加/更新するときに最適化を行うことができます。

4
Tom Gullen

可能なパフォーマンスがありますimpact:MySQLでは、temporary tablesおよびMEMORY tablesVARCHAR列を固定長列として格納し、最大長までパディングします。

必要な最大サイズよりもはるかに大きいVARCHAR列を設計すると、必要以上のメモリを消費します。これはcache efficiency, sorting speedなど.

だから、あなたが来る文字列の下にある最大長を与えます。キャラクターの最大長を10にする場合のように、長さを100以上にしないでください。

4
Vipin Jain

答えはあなたですdo n't need to、it is optional。

文字列が特定の長さを超えないようにする場合にあります。

3
NibblyPig

から ウィキペディア

Varcharフィールドは、制限までの任意のサイズにすることができます。制限はデータベースのタイプと異なり、Oracle 9iデータベースには4000バイトの制限があり、MySQLデータベースには65,535バイトの制限(行全体)およびMicrosoft SQL Server 2005 8000バイト(varchar(max)が使用されない限り)最大ストレージ容量は2,147,483,648バイトです)。

1
Luca Matteis