Вопрос

Когда мигрирующие таблицы, поступающие из других DBMS в Oracle, одна из стандартных задач - заменить все VARCHAR(n) поля с VARCHAR2(n) поля (предоставлен N <= 4000).

Почему Oracle называет этот дат VARCHAR2 И не просто VARCHAR Как другие DBMS?

Это было полезно?

Решение

Казалось бы, Oracle за один раз планировал дать другое определение Варчар чем Varchar2. Анкет Он сказал клиентам это и рекомендует не использовать Варчар. Анкет Какими бы ни были их планы, по состоянию на 11.2.0.2 Варчар идентичен Varchar2. Анкет Вот что Ссылка на язык SQL 11G выпуск 2 говорит:

Не используйте тип данных VARCHAR. Вместо этого используйте тип данных VARCHAR2. Хотя тип данных VARCHAR в настоящее время является синонимом VARCHAR2, тип данных VARCHAR планируется быть переопределенным в виде отдельного типа данных, используемого для строк символов переменной длины по сравнению с различной семантикой сравнения.

А Руководство пользователя PL/SQL и ссылка 10G выпуск 2 Покладывает это таким образом:

В настоящее время VARCHAR является синонимом VARCHAR2. Тем не менее, в будущих выпусках PL/SQL, чтобы соответствовать развивающимся стандартам SQL, VARCHAR может стать отдельным датом с различной семантикой сравнения. Это хорошая идея использовать varchar2, а не varchar.

А Концепции базы данных 10G выпуск 2 Документ говорит о том же в более сильных терминах:

DataType VARCHAR является синонимом DataType VARCHAR2. Чтобы избежать возможных изменений в поведении, всегда используйте дата DataType VARCHAR2 для хранения строк символов переменной длины.

В документации Oracle 9.2 и 8.1.7 говорят по существу одно и то же, поэтому, хотя Oracle постоянно препятствует использованию Варчар, до сих пор они ничего не сделали, чтобы изменить его паритет с Varchar2.

Другие советы

В настоящее время эти два являются синонимом.

VARCHAR - это стандартный тип данных ANSI, но реализация Oracle типа данных VARCHAR нарушает стандарт ANSI, рассматривая пустую строку, которая является нулевой (реализация Oracle предшествует стандарту ANSI). Как указывает Ли, Oracle заявил, что семантика типа данных Varchar может измениться в будущем в отношении того, как обрабатывается пустая строка. Если и когда это произойдет, семантика типа данных varchar2 останется прежней. Использование типа данных varchar2 безопаснее, потому что вам не нужно беспокоиться о том, что какая -то будущая версия Oracle нарушит ваш код, вызывая пустые строки, которые больше не считаются нулевыми.

Потому что в оригинальном стандарте SQL Varchar составлял 255 символов, а у Oracle, по крайней мере, был удар по стандартам в те дни.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top