Oracle
Oracle 的 VARCHAR 和 VARCHAR2 數據類型有什麼區別?
將來自其他 DBMS 的表遷移到 Oracle 時,標準任務之一是將所有
VARCHAR(n)
欄位替換為VARCHAR2(n)
欄位(前提是 n <= 4000)。為什麼 Oracle 將這種數據類型稱為這種數據類型
VARCHAR2
,而不是VARCHAR
像其他 DBMS 那樣?
似乎 Oracle 曾經計劃為VARCHAR提供與VARCHAR2不同的定義。它已經告訴客戶這一點,並建議不要使用VARCHAR。無論他們的計劃是什麼,從 11.2.0.2 開始,VARCHAR與VARCHAR2相同。下面是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的奇偶性。