В СУБД Oracle есть замечательный символьный/строчный типа данных, который называется VARCHAR2
.
Рассмотрим такой пример:
row_text varchar2(11);
Данный код говорит объявляет переменную с типом varchar2
. А вот цифра «11» что будет значить? Она не будет значить, что в переменную можно вписать 10 символов. И вот почему. В символьные/строчные типы данных Oracle можно уместить все, начиная с состоящего из одного символа значения и заканчивая очень большой строкой, которая может иметь размер до 32 кб. В этих типах можно хранить цифры, буквы, двоичные данные и любые другие символы, которая поддерживает СУБД Oracle.
Типы символ/строка определяют свою разрядность (или длину) с помощью целого числа. Поэтому указанное нами число «11» фактически определяет допустимое количество байтов, а не количество символов, которое мы можем записать в переменную. Т.е. мы не поместим в переменную с разрядностью 2 простой 3-х байтовый символ.
Поэтому наш код означает, что в переменную «row_text» можно передать до 11 байтов данных. Чтобы нам можно было передать любое количество символов независимо от количества байтов на один символ , нужно переписать наш код следующим образом:
row_text varchar2(11 CHAR);