Oracle

Oracle 的 VARCHAR 和 VARCHAR2 數據類型有什麼區別?

  • August 20, 2021

將來自其他 DBMS 的表遷移到 Oracle 時,標準任務之一是將所有VARCHAR(n)欄位替換為VARCHAR2(n)欄位(前提是 n <= 4000)。

為什麼 Oracle 將這種數據類型稱為這種數據類型VARCHAR2,而不是VARCHAR像其他 DBMS 那樣?

似乎 Oracle 曾經計劃為VARCHAR提供與VARCHAR2不同的定義。它已經告訴客戶這一點,並建議不要使用VARCHAR。無論他們的計劃是什麼,從 11.2.0.2 開始,VARCHARVARCHAR2相同。下面是SQL 語言參考 11g 第 2 版所說的:

不要使用 VARCHAR 數據類型。請改用 VARCHAR2 數據類型。儘管 VARCHAR 數據類型目前是 VARCHAR2 的同義詞,但與不同的比較語義相比,VARCHAR 數據類型計劃被重新定義為用於可變長度字元串的單獨數據類型。

PL/SQL 使用者指南和參考 10g 第 2 版是這樣說的:

目前,VARCHAR 是 VARCHAR2 的同義詞。但是,在未來的 PL/SQL 版本中,為了適應新興的 SQL 標準,VARCHAR 可能成為具有不同比較語義的單獨數據類型。使用 VARCHAR2 而不是 VARCHAR 是個好主意。

Database Concepts 10g 第 2 版文件用更強烈的措辭說了同樣的話:

VARCHAR 數據類型與 VARCHAR2 數據類型同義。為避免可能的行為變化,請始終使用 VARCHAR2 數據類型來儲存可變長度字元串。

Oracle 9.2 和 8.1.7 文件說的基本相同,因此即使 Oracle 一直不鼓勵使用VARCHAR,到目前為止,他們還沒有做任何事情來改變它與VARCHAR2的奇偶性。

引用自:https://dba.stackexchange.com/questions/1301