powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / EXECUTE STATEMENT изменяет длину строки в UTF8-базе
13 сообщений из 13, страница 1 из 1
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802367
Raxta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно такая проблема. База в UTF8.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
execute block returns (tmp_res varchar(38), str_size integer)
as
declare variable tmp_guid varchar(38);
declare variable tmp_sqltext varchar(300);
begin
  tmp_guid = uuid_to_char(gen_uuid());
  tmp_res = tmp_guid;
  str_size = char_length(tmp_guid);
  suspend;
  tmp_sqltext = 'select ''' || tmp_guid || ''' from rdb$database';
  execute statement (:TMP_SQLTEXT) into :tmp_guid;
  tmp_res = tmp_guid;
  str_size = char_length(tmp_guid);
  suspend;
end



Данный код возвращает для одной и той же строки разный размер char_length(). Причем если это происходит в ХП, то varchar(38) волшебным образом умещает в себе varchar(152). Кто-нибудь может знает почему? Дело в кривых руках или ошибка в FB?
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802381
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaxtaДело в кривых руках или ошибка в FB?
если вопрос стоит именно так, то нафига сразу писать в трекер?
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802394
Raxta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dimitr,

наверное потому что трекер для того и нужен, что бы туда писать, а там разработчики решали, ошибка это или нет.
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802403
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raxta,

вообще-то не так. Если ты уверен, что это баг, смело пиши в трекер. Если сомневаешься, спроси здесь, и только когда подтвердят, пиши в трекер. Иначе на фига ты этот вопрос здесь задал?
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802437
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RaxtaКто-нибудь может знает почему?
Только чайники не знают, что строковые литералы имеют тип CHAR. Так что расслабься, не ты
первый, не ты последний.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802664
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> вообще-то не так.

Вообще говоря - как раз так. Ибо про "здесь" знают
не все, про наличие тут разработчиков - тем более.
Ну а вкупе с годами культивировавшейся позицией
"трекер всё стерпит"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802699
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не важно в чём база. Важен чарсет коннекта.
Если чарсет коннекта win1251, то выводится 36 36.
Если чарсет коннекта utf8, то выводится 36 38.

Если кто-то может это объяснить - велкам :)
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802725
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
execute block returns (str_size integer)
as
declare variable s varchar(1);
begin
  execute statement ('select ''1'' from rdb$database') into :s;
  str_size = char_length(s);
  suspend;
end
----
1

execute block returns (str_size integer)
as
declare variable s varchar(10);
begin
  execute statement ('select ''1'' from rdb$database') into :s;
  str_size = char_length(s);
  suspend;
end
----
4



Бага.
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802781
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это баян на тему CHAR и UTF8 во внешнем АПИ, в трекере ищите
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38802941
Raxta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, раз это не баг и я, как это и предполагалось, чайник, ответьте, пожалуйста еще на такой вопрос. В описании к функции CHAR_LENGTH() сказано: "Gives the length in characters of the input string.". Тогда получается, у EXECUTE STATEMENT все равно не корректное поведение в том плане, что оно строку размерностью 38 увеличивает до строки размерностью 152 и заполняет пустое пробелами.
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38804256
Raxta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все решилось логично :) Ошибка исправлена, войдет в 2.5.4. Ну а пока придется избегать в некоторых случаях EXECUTE STATEMENT
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38805341
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и 2.1.7 (интереса ради?)
...
Рейтинг: 0 / 0
EXECUTE STATEMENT изменяет длину строки в UTF8-базе
    #38805347
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

его не будет.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / EXECUTE STATEMENT изменяет длину строки в UTF8-базе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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