powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
8 сообщений из 8, страница 1 из 1
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625154
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Допустим, есть UNION ALL вида:
Код: sql
1.
2.
3.
4.
select 'йцУкенг_01' from rdb$database
union all
select 'ЙцуКенг_02' from rdb$database
union all ...

Если все его строки имеют одинаковый чарсет (например, _utf8; или вообще если не указывать ни для одной строки), то LIST выполнится вполне себе очевидно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select list(s)||'<' from (select 'ЙцуКенг' s from rdb$database union all select 'йЦуКЕНГ' from rdb$database);

    CONCATENATION
=================
             0:4a
==============================================================================
CONCATENATION:
ЙцуКенг,йЦуКЕНГ<

Если же для одной из строк (любой) забыть указать чарсет, а для всех остальных задать _utf8, то будет вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select list(s)||'<' from (select _utf8 'ЙцуКенг' s from rdb$database union all select 'йЦуКЕНГ' from rdb$database);

    CONCATENATION
=================
             0:4e
==============================================================================
CONCATENATION:
ЙцуКенг       ,йЦуКЕНГ       <

Это так и должно быть ?
Я понимаю, что в UTF8 по два байта на кириллицу и что ССЗБ, но... откудова пробелы-то берутся ?
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625162
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,
ну наверное потому что результат
Код: sql
1.
select 'йцУкенг_01' from rdb$database


есть char а не varchar
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625164
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> откудова пробелы-то берутся ?

А где ты смотришь и какой тип возвращаемых данных - варчар, чар или БЛОБ ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625168
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,

тут еще зависит почему-то от макс. лимита в варчаре:
Код: plaintext
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.
SQL> select list( s )||'<' from (select cast(s as varchar(15)) s from ( select _utf8 'ЙцуКенг' s from rdb$database union all select 'йЦуКЕНГ' from rdb$database) );

    CONCATENATION
=================
              0:e
==============================================================================
CONCATENATION:
ЙцуКенг ,йЦуКЕНГ <

SQL> select list( s )||'<' from (select cast(s as varchar(20)) s from ( select _utf8 'ЙцуКенг' s from rdb$database union all select 'йЦуКЕНГ' from rdb$database) );

    CONCATENATION
=================
             0:1a
==============================================================================
CONCATENATION:
ЙцуКенг      ,йЦуКЕНГ      <

SQL> select list( s )||'<' from (select cast(s as varchar(25)) s from ( select _utf8 'ЙцуКенг' s from rdb$database union all select 'йЦуКЕНГ' from rdb$database) );

    CONCATENATION
=================
             0:12
==============================================================================
CONCATENATION:
ЙцуКенг       ,йЦуКЕНГ       <
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625169
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТаблоид> откудова пробелы-то берутся ?

А где ты смотришь и какой тип возвращаемых данных - варчар, чар или БЛОБ ?я в isql'е смотрю, как обычно :-)
То, что select _utf8 'тратата' имеет тип Char (а не Varchar) - это точно ? (я просто не знал сего)
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625171
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

любой строковый литерал имеет тип CHAR, независимо от чарсета. И тебе об этом уже говорили.
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625175
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> То, что select _utf8 'тратата' имеет тип Char (а не Varchar) - это точно ?

Конечно. При чём независимо от префикса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
    #38625177
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> select list( s )||'<' from (select cast(s as varchar(20)) s from
Таблоид> ( select _utf8 'EooEaia' s from rdb$database union all select

Не то кастишь. Пробуй внутренности кастить, сами литералы, а не конкатенацию.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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