我相信答案是甲骨文已經(jīng)非常老了。
早在SQL標準出現(xiàn)之前,Oracle就做出了一個設(shè)計決策,即在VARCHAR
/VARCHAR2
柱NULL
而且只有一種意義上的NULL(有關(guān)系理論家將區(qū)分從未被提示的數(shù)據(jù)、存在答案但用戶不知道的數(shù)據(jù)、沒有答案的數(shù)據(jù),等等)。所有這些都構(gòu)成了NULL
).
當SQL標準出現(xiàn)并同意NULL
空字符串是不同的實體,已經(jīng)有一些Oracle用戶的代碼假定兩者是等價的。因此,Oracle基本上可以選擇破壞現(xiàn)有代碼,違反SQL標準,或者引入某種初始化參數(shù),從而改變潛在大量查詢的功能。違反SQL標準(IMHO)是這三個選項中破壞性最小的。
Oracle留下了一個可能性,即VARCHAR
數(shù)據(jù)類型將在以后的版本中更改,以符合sql標準(這就是為什么每個人都使用VARCHAR2
在Oracle中,由于該數(shù)據(jù)類型的行為可以保證保持不變,因此將繼續(xù)進行)。