Особенность символьного/строчного типа данных VARCHAR2 в Oracle 10g/11g

Привет!
Возможно многие знают (я даже в этом не сомневаюсь), но может и нет про одну особенность символьного/строчного типа данных в СУБД Oracle именуемым VARCHAR2.
Сначала приведу такой код:

DECLARE 
   t_string varchar2(10);

Данный кусок кода  говорит нам — мы объявили переменную с типом varchar2. А вот цифра «10» что будет значить? Она не будет значить, что в переменную можно вписать 10 символов. И вот почему.

В символьные/строчные типы данных Oracle можно уместить все, начиная с состоящего из одного символа значения и заканчивая очень большой строкой, которая может иметь размер до 32 кб. В этих типах можно хранить цифры, буквы, двоичные данные и любые другие символы, которая поддерживает СУБД Oracle.

Типы символ/строка определяют свою разрядность (или длину) с помощью целого числа. Поэтому указанное нами число «10» фактически определяет допустимое количество байтов, а не количество символов, которое мы можем записать в переменную. Т.е. мы не поместим в переменную с разрядностью 2 простой 3-х байтовый символ.

Поэтому наш код означает, что в переменную «t_string» можно передать до 10 байтов данных. Чтобы нам можно было передать любое количество символов независимо от количества байтов на один символ , нужно переписать наш код следующим образом:

DECLARE 
   t_string varchar2(10 CHAR);

Собственно всё, что я хотел рассказать 🙂

6 мыслей про “Особенность символьного/строчного типа данных VARCHAR2 в Oracle 10g/11g

  1. Спасибо огромное! Очень помогли!) Даже не знал как правильно запрос составить…в итоге 5 ссылка и то что искал!)))

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*