powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как объединить строки WIN1251 и UNICODE_FSS ?
17 сообщений из 17, страница 1 из 1
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828442
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть таблица контрагентов
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE CONTRAGENT (
    CD_ID             BIGINT NOT NULL,
    CD_NAME           VARCHAR(255) NOT NULL, /*WIN1251*/
    CD_ID_CDK         BIGINT NOT NULL /*тип контрагента*/
);


Есть таблица локализации
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE LANG (
    ALIAS  VARCHAR(128) NOT NULL,
    ID     BIGINT NOT NULL,
    TEXTU  VARCHAR(4096) CHARACTER SET UNICODE_FSS NOT NULL
);


Есть запрос, в котором нужно получить имя контрагента и его тип на выбранном языке
Код: sql
1.
2.
3.
4.
select cd.cd_name || '/' || l.textu
from contragent cd
left join lang l on l.id = 27004 and l.alias = 'CD_KIND.' || cast(cd.cd_id_cdk as varchar(128))
where cd.cd_id = 123

Этот запрос возвращает ошибку
Код: sql
1.
2.
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.

Хотя по отдельности
Код: plaintext
select  cd.cd_name  from ...
и
Код: plaintext
select  l.textu  from ...
возвращают результат без ошибок.

Как правильно объединить строки WIN1251 и UNICODE_FSS ?
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828445
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

версия FB, чарсет коннекта? Почему UNICODE_FSS вместо UTF8?
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828448
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

FB 2.5 (2.5.2.26540), чарсет UNICODE_FSS.
Почему UNICODE_FSS? Не знаю. Внезапно потребовалась локализация. Не придумал ничего другого, кроме создания таблицы LANG.
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828451
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил в таблицу LANG еще одно поле
Код: sql
1.
TEXTUTF  VARCHAR(4096) CHARACTER SET UTF8

В настройках соединения в IBExpert указал Charset UTF8.

Объединение не работает
Код: sql
1.
2.
3.
4.
select cd.cd_name || '/' || l.textutf
from contragent cd
left join lang l on l.id = 27004 and l.alias = 'CD_KIND.' || cast(cd.cd_id_cdk as varchar(128))
where cd.cd_id = 123

Та же ошибка
Код: sql
1.
2.
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828452
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

надо
1. fb 2.5.3
2. читать http://www.ibase.ru/unicode_faq.html
и использовать UTF8
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828455
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

Код: sql
1.
2.
3.
4.
select cast(cd.cd_name as varchar(255) charset utf8) || '/' || l.textutf
from contragent cd
left join lang l on l.id = 27004 and l.alias = 'CD_KIND.' || cast(cd.cd_id_cdk as varchar(128))
where cd.cd_id = 123



попробуй так, хотя для смешивание charset'ов не очень хорошо
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828456
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Код: sql
1.
2.
3.
4.
select cast(cd.cd_name as varchar(255) character set utf8) || '/' || l.textutf
from contragent cd
left join lang l on l.id = 27004 and l.alias = 'CD_KIND.' || cast(cd.cd_id_cdk as varchar(128))
where cd.cd_id = 123




ошибся маленько
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828457
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

пишет ошибку:
Код: sql
1.
2.
Token unknown - line 1, column 40.
charset
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828458
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

спасибо, получилось.
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828459
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

В fb 2.5.3 конкатенация работает иначе?
Лучше использовать поле
Код: sql
1.
TEXTUTF  VARCHAR(4096) CHARACTER SET UTF8

?
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828463
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

UTF8 рекомендованный чарсет для поддержки UNICODE.
UNICODE_FSS устаревший, хотя сейчас используется для хранения метаданных. Но в будущем возможно и там перейдут на UTF8.
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828464
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloВ fb 2.5.3 конкатенация работает иначе?
нет. но обновления выпускаются не "по приколу".

MarcelloЛучше использовать поле
интересно, зачем я писал faq, и дал на него ссылку? Чтобы потом тут его цитировать?
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828468
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, kdv, спасибо.
В ближайшее время запланирую переход на 2.5.3.
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828469
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloВ fb 2.5.3 конкатенация работает иначе?
Да забей ты вообще на эту конкатенацию. Выбирай отдельные поля и складывай их на клиенте
сколько влезет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828472
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

я надеюсь, ты подразумевал, что у него коннект будет в utf8, а не в win1251, чтобы литерал был в соответствующем чарсете.
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38828475
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

ну он вроде бы написал что чарсет коннекта у него UNICODE_FSS. Пример написал с UTF8. Надеюсь он догадался не только поле поменять на этот чарсет, но и чарсет коннекта. А вообще правильней конечно всю базу на UTF8 перевести и не страдать такой фигнёй.
...
Рейтинг: 0 / 0
Как объединить строки WIN1251 и UNICODE_FSS ?
    #38829691
NikolayV81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис А вообще правильней конечно всю базу на UTF8 перевести и не страдать такой фигнёй.

И никогда не забывать что мерить нужно кол-во символов :) А то некоторые любят присылать всякие таблички для разбора :)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как объединить строки WIN1251 и UNICODE_FSS ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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