Яка різниця між типами даних VARCHAR від Oracle від VARCHAR2?


Відповіді:


26

Здавалося б, Oracle свого часу планував дати інше визначення VARCHAR, ніж VARCHAR2 . Він повідомив клієнтам про це і рекомендує не використовувати VARCHAR . Які б плани не були, станом на 11.2.0.2 VARCHAR є ідентичним VARCHAR2 . Ось що говорить посилання на мову SQL 11g, випуск 2 :

Не використовуйте тип даних VARCHAR. Використовуйте замість цього тип даних VARCHAR2. Хоча тип даних VARCHAR в даний час є синонімом VARCHAR2, тип даних VARCHAR планується переосмислити як окремий тип даних, що використовується для символьних рядків змінної довжини порівняно з різною семантикою порівняння.

Посібник користувача PL / SQL та довідка 10 г Випуск 2 ставлять це так:

В даний час VARCHAR є синонімом VARCHAR2. Однак у майбутніх випусках PL / SQL, щоб відповідати новим стандартам SQL, VARCHAR може стати окремим типом даних з різною семантикою порівняння. Корисно використовувати VARCHAR2, а не VARCHAR.

База даних Концепції 10g Release 2 говорить про те ж саме в більш чіткій формі:

Тип даних VARCHAR є синонімом типу даних VARCHAR2. Щоб уникнути можливих змін у поведінці, завжди використовуйте тип даних VARCHAR2 для зберігання рядків символів змінної довжини.

Документація Oracle 9.2 і 8.1.7 говорить по суті те саме, тому, хоча Oracle постійно відмовляє від використання VARCHAR , до цих пір вони нічого не зробили, щоб змінити її паритет з VARCHAR2 .


Я пам'ятаю varchar2 в Oracle 8i, але я не впевнений, чи був це той самий варчар тоді.
bernd_k


Є вказівки на те, що в якийсь момент до 8i визначення може бути іншим.
Лей Ріффел

Раніше я думав, що varcharперед версією 8 існувало інше обмеження довжини , але я не можу знайти нічого поважного, щоб підкріпити це, і тепер цікаво, чи це лише міф.
Джек Дуглас

@Jack Douglas - Я нічого не можу знайти в документації Oracle 7 про це. Від docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Сервер Oracle 7 >> Концепції сервера >> Типи даних Oracle (не можуть безпосередньо посилатися на нього) говорять майже про те саме, що й пізніше версії. В іншому розділі документації версії 7 сказано, що у версії 6 Варчар та Варчар2 були синонімами char.
Лей Ріффель,

25

Наразі вони є двома синонімами.

VARCHAR - стандартний тип даних ANSI, але реалізація типу даних VARCHAR Oracle порушує стандарт ANSI, вважаючи, що порожня рядок є NULL (реалізація Oracle передує стандарту ANSI). Як зазначає Лі, Oracle заявив, що семантика типу даних VARCHAR може змінитися в майбутньому стосовно того, як поводиться порожня рядок. Якщо і коли це станеться, семантика типу даних VARCHAR2 залишиться колишньою. Використання типу даних VARCHAR2 є більш безпечним, оскільки вам не доведеться турбуватися про те, що якась майбутня версія Oracle порушить ваш код, викликаючи порожні рядки більше не вважатись NULL.


3

Оскільки в оригінальному стандарті SQL VARCHAR налічував 255 символів, а Oracle принаймні мав удар у відповідність стандартам у ті часи.


Це дає надію побачити Oracle varchar3 (max) через кілька років.
bernd_k

Sql-сервер не мав проблем із збільшенням дозволеної довжини з 255 до 8000 (і тепер навіть до max). Чому Oracle потребував іншого типу даних.
bernd_k

1
Немає потреби в varchar(max), просто використовуйтеCLOB
a_horse_with_no_name

3
CLOB має різну семантику до VARCHAR2
Гай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.