В чем разница между varchar и varchar2 в Oracle?



в чем разница между varchar и varchar2?

677   8  

8 ответов:

На данный момент они являются синонимами.

VARCHAR зарезервирован Oracle для поддержки различия между NULL и пустая строка в будущем, как ANSI стандарт предписывает.

VARCHAR2 не различает a NULL и пустая строка, и никогда не будет.

если вы полагаетесь на пустую строку и NULL быть то же самое, вы должны использовать VARCHAR2.

В настоящее время VARCHAR ведет себя точно так же, как VARCHAR2. Однако этот тип не следует использовать, поскольку он зарезервирован для будущего использования.

взято из: разница между CHAR, VARCHAR, VARCHAR2

взято из последней стабильной производственной версии Oracle 12.2: Типы Данных

главное отличие в том, что VARCHAR2 это внутренний тип данных и VARCHAR это внешний тип данных. Поэтому нам нужно понять разницу между внутренним и внешним типом данных...

внутри базы данных, значения хранятся в Столбцах в таблицах. Внутри Oracle представляет данные в определенных форматах, известных как внутренние типы данных.

как правило, приложения OCI (Oracle Call Interface) работают не с внутренними представлениями типов данных, а с типами данных языка хоста, которые предопределены языком, на котором они написаны. Когда данные передаются между клиентским приложением OCI и таблицей базы данных, библиотеки OCI преобразуют данные между внутренними типами данных и внешними типами данных.

внешние типы обеспечивают удобство для программист, сделав возможным работать с типами языков хоста вместо проприетарных форматов данных. OCI может выполнять широкий спектр преобразований типов данных при передаче данных между базой данных Oracle и приложением OCI. Существует больше внешних типов данных OCI, чем внутренних типов данных Oracle.

The VARCHAR2 тип данных представляет собой строку символов переменной длины с максимальной длиной 4000 байт. Если инит.параметр ora max_string_size по умолчанию, максимальный длина VARCHAR2 может быть 4000 байт. Если инит.параметр ora max_string_size = extended, максимальная длина a VARCHAR2 может быть 32767 байт

The VARCHAR тип данных хранит символьные строки различной длины. Первые 2 байта содержат длину символьной строки, а остальные байты содержат строку. Указанная длина строки в вызове bind или define должна включать два байта длины, поэтому самый большой VARCHAR строка, которая может быть получена или отправлена 65533 байт длиной, а не 65535.

быстрый тест в базе данных 12.2 предполагает, что в качестве внутренний тип данных, Oracle все еще лечит a VARCHAR как псевдотип на VARCHAR2. Это не SYNONYM который является фактическим типом объекта в Oracle.

SQL> select substr(banner,1,80) from v$version where rownum=1;
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production    

SQL> create table test (my_char varchar(20));
Table created.

SQL> desc test
Name                 Null?    Type
MY_CHAR                       VARCHAR2(20)

есть также некоторые последствия VARCHAR для параметров Прекомпилятора ProC / C++. Для программистов, которые заинтересованы, ссылка находится по адресу:Pro * C / C++ руководство программиста

после некоторых экспериментов (см. Ниже) я могу подтвердить, что по состоянию на сентябрь 2017 года ничего не изменилось в отношении функциональности, описанной в принято отвечать: -

  1. rextester demo для Oracle 11g: Пустые строки вставляются как NULL s для обоих VARCHAR и VARCHAR2.
  2. LiveSQL demo для Oracle 12c: те же результаты.

в историческая причина этих двух ключевых слов хорошо объясняется в ответ на другой вопрос.

в настоящее время они одинаковы. но раньше

  1. где-то в сети, я читал, что,

VARCHAR зарезервировано Oracle для поддержки различия между NULL и пустая строка в будущем, как предписывает стандарт ANSI.

VARCHAR2 не различает a NULL и пустая строка, и никогда не будет.

  1. и

Emp_name varchar(10) - если вы вводите значение менее 10 цифр, то остальные пространство не может быть удален. он использовал всего 10 мест.

Emp_name varchar2(10) - если вы вводите значение менее 10 цифр, то оставшееся пространство автоматически удаляется

VARCHAR2

используется для хранения символьных строк переменной длины. Длина строкового значения будет сохранена на диске вместе с самим значением.

variable x varchar2(10)
begin
 :x := 'hullo';
end;
/

тип varchar

ведет себя точно так же, как VARCHAR2. Однако этот тип не следует использовать, так как он зарезервирован для дальнейшего использования

  1. VARCHAR может хранить до 2000 байт символов, в то время как VARCHAR2 может хранить до 4000 байт символов.

  2. если мы объявим тип данных как VARCHAR, то он будет занимать место для нулевых значений. В случае типа данных VARCHAR2 он не будет занимать места для нулевых значений. например,

    name varchar(10)

зарезервирует 6 байт памяти, даже если имя ' Ravi__', тогда как

name varchar2(10) 

оставляем пробел в соответствии с длиной входной строки. например, 4 байта памяти для ' Ravi__'.

здесь _ представляет NULL.

Примечание: varchar зарезервирует место для нулевых значений, а varchar2 не будет резервировать место для нулевых значений.

отличия:

  • VARCHAR может хранить до 2000 байт символов, в то время как VARCHAR2 может хранить до 4000 байт символов.
  • если мы объявим тип данных как VARCHAR тогда он будет занимать место для NULL значения, в случае VARCHAR2 тип данных он не будет занимать никакого места.

сходство:

  • VARCHAR и VARCHAR2 оба переменных характер.

источник

Comments

    Ничего не найдено.