-3

VARCHAR と VARCHAR2 のサイズ制限は、さまざまな SQL RDBMS 実装で異なりますか?それとも同じですか? 手伝ってくれてありがとう。

4

1 に答える 1

4

まずvarchar、MySQL でvarchar2使用され、Oracle で使用されます。さらに、varchar と varchar2 のサイズと制限は、データベースによって異なります。

参照元: http://docs.oracle.com/cd/E12151_01/doc.150/e12155/oracle_mysql_compared.htm

MySQL と Oracle では、サポートする文字型と、文字型の値を格納および取得する方法にいくつかの違いがあります。

MySQL は、長さが 65,535 バイト未満の文字型の CHAR および VARCHAR 型をサポートしています。CHAR 型は最大 255 バイトの長さを持つことができ、MySQL 3.23 では長さ 0 バイトで宣言することもできます。MySQL 5.0.3 より前では、VARCHAR タイプの長さ指定は CHAR タイプと同じです。MySQL 5.0.3 以降、VARCHAR タイプの最大長は 65,535 バイトです。Oracle は、CHAR、NCHAR、NVARCHAR2、および VARCHAR2 の 4 つの文字型をサポートしています。すべての Oracle 文字型で宣言できる最小の長さは 1 バイトです。CHAR および NCHAR で許容される最大サイズは 2,000 バイトで、NVARCHAR2 および VARCHAR2 では 4,000 バイトです。

MySQL CHAR 値は、格納時に指定された長さになるまでスペースで右側がパディングされ、値が取得されるときに末尾のスペースが削除されます。一方、VARCHAR 値は指定された数の文字を使用して格納されますが、MySQL 5.0.3 より前では、値が格納および取得されるときに末尾のスペースが削除されます。Oracle は、値が列の長さよりも短い場合、CHAR および NCHAR 型の値を列の長さに合わせて空白で埋め、末尾のスペースは取得時に削除されません。NVARCHAR2 および VARVHAR2 データ型列の場合、Oracle は、末尾のスペースを含め、指定されたとおりに値を格納および取得します。

指定された長さを超える値が文字型カラムに割り当てられた場合、STRICT SQL モードが設定されていない限り、MySQL は値を切り捨て、エラーを生成しません。文字型の列に割り当てられた値が指定された長さを超えると、Oracle はエラーを生成します。

MySQL では、すべての文字型 (CHAR、VARCHAR、および TEXT) 列に列文字セットと照合順序があります。文字セットまたは照合順序が列定義で明示的に定義されていない場合、テーブルの文字セットまたは照合順序が指定されていれば暗黙的に指定されます。それ以外の場合は、データベース文字または照合順序が選択されます。Oracle では、CHAR 型と VARCHAR2 型の文字セットはデータベースの文字セットによって定義され、NCHAR 型と NVARCHAR 型の文字セットは各国語文字セットによって定義されます。

MySQL で CHAR または VARCHAR 型を宣言する場合、デフォルトの長さセマンティクスは、MySQL 4.1 以降のバイトではなく文字です。Oracle では、デフォルトの長さセマンティクスは、CHAR および VARCHAR2 型の場合はバイト、NCHAR および NVARCHAR2 型の場合は文字です。

SQL Developer は、MySQL CHAR および VARCHAR 型を Oracle CHAR および VARCHAR2 型にそれぞれマップします。SQL Developerは、対応するMySQL CHARおよびVARCHARデータ型列に指定された最大長を保持するために必要なバイト数から、Oracle CHARおよびVARCHAR2データ型列の最大バイト数を決定します。MySQL VARCHAR2 カラムのデータが 4000 バイトを超えるようなものである場合、そのカラムを Oracle CLOB データ タイプのカラムに変換します。

于 2013-01-07T06:00:25.730 に答える