どの「VARCHAR(255)ルール」を参照していますか?
各データベースベンダーは、必要に応じてVARCHARを自由に実装できます。 VARCHARのルール(およびガイドライン)は、必ずしもすべてのデータベースで同じになるとは限りません。
SQL標準に関しては、私は実際には調べていません。かなり緩い可能性があるため、すべてのVARCHAR実装はすべて標準に準拠していることがわかります。 VARCHARのSQL標準が本当に厳格な場合、DBMSベンダーは標準を拡張するか、単に準拠していない可能性があります。実際の基準はそれほど重要ではないと思います。重要なのは、DBMSによって適用される実際のルールです。
一般的なガイドラインとして、システム要件をサポートするのに十分な長さのVARCHARの長さを指定してください。システムの要件が200文字以下である場合は、長さをVARCHAR(200)
として指定します。 。
別の一般的なガイドラインとして、必要以上に大きいVARCHARの長さを定義しないでください。必要以上に長く宣言されたVARCHAR列は、リソースとパフォーマンスに影響を与える可能性があります。
VARCHARの長さに対するOracleの制限は4000文字です。 (以前のバージョンのOracleでは、最大値は2000でした。4000文字を超える文字が必要な場合は、CLOB
を使用できます。 データ型。
SQLServerの制限はVARCHAR(8000)
、VARCHAR(MAX)
を指定しない限り これにより、最大サイズ(バイト単位)は2^32-1になります。
MySQLには、最大行長制限の65,535の制限があります。そのため、utf8のようなマルチバイト文字セットを使用する場合、VARCHARのサイズをVARCHAR(21844)に効果的に制限します。 1バイトの文字セット(latin1など)の場合、最大値はVARCHAR(65532)になります。それより多くの文字が必要な場合、または最大行長の制限に達した場合は、VARCHARの代わりにTEXTデータ型を使用できます。
ほとんどのDBMSVARCHAR実装は、値とともにVARCHAR列の「長さ」フィールドを格納します。長さは整数として格納されます。
一部のDBMSでは、VARCHAR列の最大長(バイト単位)が255バイトを超えない場合、長さフィールドを1バイト整数として実装できます。列で255バイトを超える場合は、長さフィールドを1バイトより大きくする必要があります。
動的行フォーマットでは、行ストレージの観点から、列に10文字を格納するため、列がVARCHAR(30)またはVARCHAR(1000)として定義されているかどうかは実際には重要ではありません。固定行フォーマットでは、列の最大長のスペースが予約されます。行ストレージの形式はDBMSに依存し、場合によっては(MySQL)ストレージエンジンと指定された行形式に依存します。
はい、2016年です。最初の商用リレーショナルデータベースシステムの導入以来、私たちは長い道のりを歩んできました。
データベースはシステムの一部にすぎません。アプリケーションまたはその他のソフトウェアコンポーネントに制限がある場合があります。 (アプリケーションがCで記述されていて、アプリケーションがフィールドにバイト配列を使用して構造を定義している場合、サイズの制限が重要になります。データベースで許可されているサイズを増やしても、アプリケーションは自動的に修正されません。 。
また、JavascriptコードまたはWebページのHTML要素に長さの制限/制限がある可能性があります。または、他のソフトウェアコンポーネントの制限がある場合があります。たとえば、非常に古いSQL Server ODBCドライバーの中には、CHAR列とVARCHAR列の両方に255文字(バイト?)の制限があるものがあります。
したがって、データベース内のVARCHARの長さはストーリーの一部にすぎません。
とはいえ、あなたが尋ねたとき、私はあなたが何を意味するのかまだはっきりしていません
VARCHAR(255)ルールを破ることはできますか?
あなたが何の「ルール」を指しているのだろうか。私が知っているほとんどすべてのデータベースでは、255バイトまたは255文字よりはるかに長いVARCHAR列を定義することが可能です。そして、それを行ってもルールは破られません。