powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Varchar(), UTF8, Firebird 2.5
3 сообщений из 3, страница 1 из 1
Varchar(), UTF8, Firebird 2.5
    #38905532
FedorinoFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,вероятно я что-то не понимаю, но!
Возникло некое непонимание текущей работы с Varchar.
Раньше, где-то на уровне FB1.5 значения, перед вставкой в поле Varchar, rtrim-мились.
Теперь, не уверен с какой точно версии, в поле Varchar хранятся концевые пробелы тоже.
Насторожили и непонятны следующие моменты:
1. Теперь, "лишние" пробелы тихонько отсекаются (т.е. попытка вставить строку из 6 пробелов в поле varcahr(5) не приведет к string truncation) Чем они, пробелы, отличаются от других символов? ведь если я их туда пихаю, то мне это надо :-)
2. как оказалось, при иcпользовании кодировки UTF8, в поле Varchar(5) можно вставить 20!!! пробелов (вероятно, это 5символов*4байта). На самом деле, вставлять можно и больше, но при вычитке длина строки (CHAR_LEHGTH()) будет 20. Какой-то обман, на мой взгляд.

Баг или фича? вот в чем вопрос.

На всякий случай, простые примеры для наблюдения описанной ситуации

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
- тестовая таблица
CREATE TABLE T1 (
    F1   VARCHAR(5),
    LEN  INTEGER
);

-- наполнение данными
-- вставляем строки из пробелов
EXECUTE BLOCK AS DECLARE VARIABLE I INTEGER;
BEGIN
  I = 1;
  WHILE (:I <= 40) DO
  BEGIN
    INSERT INTO T1 (F1, LEN)
    VALUES (LPAD('', :I), :I);
    I = :I + 1;
  END
END

-- извлечение данных
SELECT
  CAST('[' || F1 || ']' AS VARCHAR(50)),
  CHAR_LENGTH(F1),
  LEN
FROM
  T1;


...
Рейтинг: 0 / 0
Varchar(), UTF8, Firebird 2.5
    #38905732
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFFРаньше, где-то на уровне FB1.5 значения, перед вставкой в поле Varchar,
rtrim-мились.
Никогда такого не было в сервере.

FedorinoFFТеперь, не уверен с какой точно версии, в поле Varchar хранятся концевые
пробелы тоже.
От начала времён.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Varchar(), UTF8, Firebird 2.5
    #38905750
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FedorinoFF,

то что хранит это нормально. А вот то что туда можно вставить более 5 пробелов наверное баг. Хотя может зависеть от COLLATE.
Появится кто-нибудь из разработчиков скажут точнее.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Varchar(), UTF8, Firebird 2.5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]