При использовании набора символов UTF8 для полей VARCHAR(N)
необходимо зарезервировать достаточно места для любых символов N
UTF8. Длина одного такого символа может составлять от 1 до 4, поэтому единственно безопасным является использование N
символов длиной 4 каждый, что означает, что для хранения 50 символов должно быть место для 200 байтов (наихудшее условие ).
Вы можете использовать инструмент FlameRobin , чтобы взглянуть на внутренности. Предположим, у вас есть таблица
CREATE TABLE "TableÅÄÖåäö"
(
"ColÅÄÖåäö" Varchar(50)
);
в базе данных с набором символов по умолчанию UTF8. (Обратите внимание, что для этого вам нужен как минимум Firebird 2.0.)
Системные таблицы хранят информацию обо всех отношениях и их полях. В системной таблице RDB$RELATION_FIELDS
есть запись для этого поля, которая имеет (например) RDB$1
как RDB$FIELD_SOURCE
. В RDB$FIELDS
есть одна запись для RDB$1
, а ее значение RDB$FIELD_LENGTH
равно 200.
Итак, чтобы ответить на ваш вопрос: чтобы иметь столбец UTF8 с пробелом для 255 символов, введите его как VARCHAR(255)
, но в базе данных он будет иметь размер 1020 байт.