Разница между VARCHAR и VARCHAR2 в ORACLE

Разница между VARCHAR и VARCHAR2 в ORACLE SQL, Oracle, Собеседование, База данных, Вопрос, Задача, Длиннопост

Здравствуйте, друзья!

Всем хорошего понедельника! Предлагаю повторить разницу между типами данных VARCHAR и VARCHAR2 в ORACLE. А заодно расскажу ещё несколько интересных фактов!

Оба типа мы можем использовать в качестве типа данных при создании столбцов в таблице.

Тип VARCHAR2 - это аналог VARCHAR (тоже служит для хранения текстовой информации в столбце) и есть только в СУБД ORACLE.

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

Итак, VARCHAR2 есть только в ORACLE, то есть это Оракловый тип данных, аналогичный стандартному VARCHAR. Преимущество VARCHAR2 в скорости: поиск по нему ведётся быстрее. Ещё одно преимущество VARCHAR2: с версии ORACLE 12с значительно увеличен максимальный размер, который можно указывать для этого типа данных.

Для VARCHAR максимальное количество символов 4.000.
Для VARCHAR2 максимальное количество байт 32.767.

При создании столбца в таблице, когда мы указываем тип данных для столбца, мы уточняем сколько максимум символов будет в нём храниться. Например:

CREATE TABLE CLIENTS (
ID  NUMBER,
NAME  VARCHAR(100),
INN  VARCHAR(12)
)

Для VARCHAR мы указываем в скобочках именно количество символов, а для VARCHAR2 - количество байт. По стандарту, для неюникодных баз данных, 1 байт - это один символ. Но для юникодных баз данных 1 символ кодируется двумя байтами, поэтому для VARCHAR2 в юникодных базах данных нужно указывать размер в два раза больший, чем размер символов, который требуется иметь возможность хранить в столбце. То есть наш пример пришлось бы переделать на:

CREATE TABLE CLIENTS (
ID  NUMBER,
NAME  VARCHAR2(200),
INN  VARCHAR2(24)
)

Итак, повторим: для VARCHAR в скобочках указывается максимальное количество символов, которое можно хранить в столбце, а для VARCHAR2- максимальное количество байт. Для русского, английского языка 1 байт = 1 символ. ORACLE позволяет с помощью NLS параметров указать другую единицу измерения максимальной длины данных. То есть можно настроить, что для VARCHAR2 тоже будет указываться количество символов, а не байт. Можно настроить как удобно!

И ещё, при объявлении столбца с типом данных VARCHAR2, можно указывать даже явно единицу измерения:

CREATE TABLE CLIENTS (
ID  NUMBER,
NAME  VARCHAR2(100 BYTE),
INN  VARCHAR2(12 CHAR)
)

И напоследок очень важная деталь: для типа данных VARCHAR2 понятие пустой строки и NULL.... это одно и тоже! То есть если в некотором столбце типа данных VARCHAR2 пустая строка, то это NULL. Всех разработчиков это когда то застигает врасплох! Ведь согласно ANSI стандарту пустая строка и NULL - это разные вещи! Но не для VARCHAR2! Дело в том, что ORACLE придумал тип данных VARCHAR2 до того, как появился стандарт ANSI, регламентирующий это. И теперь приходится с этим жить!

Ещё больше полезного и интересного в моём Телеграмм-Канале: https://t.me/sql_oracle_databases

Всем хорошего начала рабочей и учебной недели!

Лига программистов

1.5K постов11.3K подписчиков

Добавить пост

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Подробнее