Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ? / 8 сообщений из 8, страница 1 из 1
24.04.2014, 21:30:19
    #38625154
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
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
24.04.2014, 21:54:38
    #38625162
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
Таблоид,
ну наверное потому что результат
Код: sql
1.
select 'йцУкенг_01' from rdb$database


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

А где ты смотришь и какой тип возвращаемых данных - варчар, чар или БЛОБ ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.04.2014, 22:06:50
    #38625168
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
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
24.04.2014, 22:08:05
    #38625169
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
Гаджимурадов РустамТаблоид> откудова пробелы-то берутся ?

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

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

Конечно. При чём независимо от префикса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.04.2014, 22:14:18
    #38625177
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ?
Таблоид> 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
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / LIST( _utf8 "йЦуКенг" union all "йЦукеНг") - добивает пробелами до удвоенной длины. Why ? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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