回答:
今のところ、それらは同義語です。
VARCHAR
標準で規定されているように、と将来の空の文字列のOracle
区別をサポートするために予約されています。NULL
ANSI
VARCHAR2
NULL
と空の文字列を区別せず、区別しません。
空の文字列に依存しNULL
て同じものである場合は、を使用する必要がありますVARCHAR2
。
VARCHAR2
、現在のように動作するタイプがないためVARCHAR
です。実際、VARCHAR
適切に実装されるまでは使用すべきではありません。
where x is NULL
から戻っ異なる結果where x = ''
んではないことを意味NULL
し、''
別の任意の方法です。異なる動作は、=
オペレーターによるものです。
現在、VARCHARはVARCHAR2とまったく同じように動作します。ただし、タイプVARCHAR
は将来の使用のために予約されているため、使用しないでください。
VARCHAR
は使用しないでください。私はそれを編集しました
最新の安定したOracle製品バージョン12.2から取得: データ型
主な違いは、つまりVARCHAR2
ある内部データ・タイプとVARCHAR
なる外部データ型。したがって、内部データ型と外部データ型の違いを理解する必要があります...
データベース内では、値はテーブルの列に格納されます。内部的には、Oracleは内部データ型と呼ばれる特定の形式でデータを表します。
一般に、OCI(Oracle Call Interface)アプリケーションは、データの内部データ型表現では機能しませんが、記述された言語で事前定義されているホスト言語データ型では機能しません。OCIクライアントアプリケーションとデータベーステーブルの間でデータが転送されると、OCIライブラリは内部データ型と外部データ型の間でデータを変換します。
外部型は、独自のデータ形式の代わりにホスト言語の型を操作できるようにすることで、プログラマーに便利を提供します。OCIは、OracleデータベースとOCIアプリケーション間でデータを転送するときに、さまざまなデータ型変換を実行できます。Oracle内部データ型よりも多くのOCI外部データ型があります。
VARCHAR2
データ型は、4000バイトの最大長を持つ文字の可変長の文字列です。init.oraパラメータmax_string_sizeがデフォルトの場合、aの最大長はVARCHAR2
4000バイトです。init.oraパラメータmax_string_size = extendedの場合、aの最大長はVARCHAR2
32767バイトになります。
VARCHAR
データ型は可変長の文字列を格納します。最初の2バイトには文字列の長さが含まれ、残りのバイトには文字列が含まれます。バインドまたは定義呼び出しで指定された文字列の長さには2バイトの長さが含まれている必要があるため、VARCHAR
送受信できる最大の文字列は65535バイトではなく65533バイトです。
12.2データベースで簡単なテストは、ようことを示唆している内部データ型、Oracleはまだ扱いVARCHAR
として偽のためにVARCHAR2
。SYNONYM
Oracleでは実際のオブジェクトタイプではありません。
SQL> select substr(banner,1,80) from v$version where rownum=1;
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> create table test (my_char varchar(20));
Table created.
SQL> desc test
Name Null? Type
MY_CHAR VARCHAR2(20)
VARCHAR
ProC / C ++プリコンパイラオプションには、いくつかの影響もあります。興味のあるプログラマー向けのリンクは次のとおりです。Pro* C / C ++ Programmer's Guide
いくつかの実験(下記を参照)の後、2017年9月の時点で、承認された回答に記載されている機能に関して何も変更されていないことを確認できます。
NULL
両方のためのVARCHAR
とVARCHAR2
。これら2つのキーワードの歴史的な理由は、別の質問に対する回答でよく説明されています。
VARCHARは最大2000バイトの文字を格納でき、VARCHAR2は最大4000バイトの文字を格納できます。
データ型をVARCHARとして宣言すると、NULL値用のスペースが占有されます。VARCHAR2データ型の場合、NULL値用の領域は使用されません。例えば、
name varchar(10)
名前が「Ravi__」であっても6バイトのメモリを予約しますが、
name varchar2(10)
入力文字列の長さに応じてスペースを予約します。たとえば、「Ravi__」用の4バイトのメモリ。
ここで、_はNULLを表します。
注:varcharはnull値用のスペースを予約し、varchar2はnull値用のスペースを予約しません。
VARCHAR
してCHAR
いると思います。
現在、それらは同じです。以前は
VARCHAR
NULL
ANSI規格で規定されているように、将来的に空の文字列との区別をサポートするためにOracleによって予約されています。
VARCHAR2
NULL
と空の文字列を区別せず、区別しません。
Emp_name varchar(10)
-10桁未満の値を入力すると、残りのスペースは削除できません。合計10個のスペースを使用しました。
Emp_name varchar2(10)
-10桁未満の値を入力すると、残りのスペースは自動的に削除されます
create table deleteme_table(v varchar(10), v2 varchar2(10)); insert into deleteme_table (v, v2) values ('abc','abc'); select v, length(v), v2, length(v2) from deleteme_table;