将表从其他DBMS迁移到Oracle时,标准任务之一是将所有VARCHAR(n)
字段替换为VARCHAR2(n)
字段(提供n <= 4000)。
为什么Oracle调用此数据类型VARCHAR2
而不是VARCHAR
像其他DBMS一样?
将表从其他DBMS迁移到Oracle时,标准任务之一是将所有VARCHAR(n)
字段替换为VARCHAR2(n)
字段(提供n <= 4000)。
为什么Oracle调用此数据类型VARCHAR2
而不是VARCHAR
像其他DBMS一样?
Answers:
似乎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是一个好主意。
该数据库概念10g第2版的文件说,在强烈的措辞同样的事情:
VARCHAR数据类型与VARCHAR2数据类型同义。为了避免行为上的可能变化,请始终使用VARCHAR2数据类型来存储长度可变的字符串。
Oracle 9.2和8.1.7文档在本质上说的是同一件事,因此,即使Oracle一直不鼓励使用VARCHAR,到目前为止,他们还没有采取任何措施来更改VARCHAR2的奇偶校验。
varchar
版本8之前的长度限制是不同的,但是我找不到任何值得支持的东西,现在想知道这是否只是一个神话。
因为在最初的SQL标准中,VARCHAR为255个字符,并且Oracle在当时至少要符合标准。
varchar(max)
,只需使用CLOB