OracleのVARCHARデータ型とVARCHAR2データ型の違いは何ですか?


回答:


26

Oracleには、VARCHAR2よりもVARCHARに異なる定義を与える計画があったように思われます。これはお客様にこれを伝えており、VARCHARの使用を推奨していません。11.2.0.2の時点で、それらの計画が何であれ、VARCHARVARCHAR2と同一です。ここでは何であるSQL言語リファレンス11gリリース2は言います:

VARCHARデータ型を使用しないでください。代わりにVARCHAR2データ型を使用してください。VARCHARデータ型は現在VARCHAR2と同義ですが、VARCHARデータ型は、異なる比較セマンティクスと比較して、可変長文字列に使用される個別のデータ型として再定義される予定です。

PL / SQLユーザーズ・ガイドおよびリファレンス10gリリース2プットそれをこの方法:

現在、VARCHARはVARCHAR2と同義です。ただし、PL / SQLの将来のリリースでは、新しいSQL標準に対応するため、VARCHARは異なる比較セマンティクスを持つ個別のデータ型になる可能性があります。VARCHARではなくVARCHAR2を使用することをお勧めします。

データベースの概念10gリリース2文書が強いという点で同じことを言います:

VARCHARデータ型はVARCHAR2データ型と同義です。動作の変更を避けるため、常にVARCHAR2データ型を使用して可変長文字列を格納してください。

Oracle 9.2と8.1.7のドキュメントは本質的に同じことを言っているので、たとえOracleがVARCHARの使用を絶えず推奨していなくても、これまではVARCHAR2とのパリティを変更するために何もしていません。


Oracle 8iのvarchar2を覚えていますが、それが同じvarcharであったかどうかはわかりません。
bernd_k


8iより前のある時点で、定義が異なる可能性があるという兆候があります。
リーリッフェル

varchar以前はバージョン8 より前に長さの制限が異なっていたと思っていましたが、これをバックアップする信頼できるものを見つけることができず、今では単なる神話かどうか疑問に思います。
ジャックダグラス

@Jack Douglas-それに関するOracle 7のドキュメントには何も見つかりません。docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htmから>> Oracle 7 Server >> Server Concepts >> Oracle Datatypes(直接リンクできない)は、後とほぼ同じことを言っていますバージョン。バージョン7のドキュメントの別のセクションでは、バージョン6ではVarcharとVarchar2はcharの同義語であると書かれています。
リーリッフェル

25

現在、この2つは同義語です。

VARCHARはANSI標準のデータ型ですが、OracleのVARCHARデータ型の実装は、空の文字列をNULLとみなすことでANSI標準に違反します(Oracleの実装はANSI標準よりも前です)。Leighが指摘しているように、Oracleは、空の文字列の処理方法に関して、VARCHARデータ型のセマンティクスが将来変更される可能性があると述べています。その場合、VARCHAR2データ型のセマンティクスは同じままです。VARCHAR2データ型を使用する方が安全です。これは、Oracleの将来のバージョンが、空の文字列がNULLと見なされなくなることによりコードが破損することを心配する必要がないためです。


3

元のSQL標準ではVARCHARが255文字であり、Oracleは少なくとも当時の標準への準拠を突き刺していたためです。


これにより、数年後にOracle varchar3(max)を見ることができます。
bernd_k

Sql-serverには、許容される長さを255から8000に(そして今では最大に)増やす問題はありませんでした。Oracleに異なるデータ型が必要な理由。
bernd_k

1
aの必要はありませんvarchar(max)CLOB
。aを

3
CLOBはVARCHAR2に異なる意味を持っている
ガイウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.