powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с UNICODE_FSS
14 сообщений из 39, страница 2 из 2
Помогите с UNICODE_FSS
    #39189035
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

процедура хранимая. Вызывается так:
Код: sql
1.
select yname from get_tovar_name_new_2


Ошибка та же.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189041
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проапдейтил значение поля на "ёпрст".
Код: sql
1.
select yname from get_tovar_name_new_2


Без ошибок.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189053
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

вот не дает ошибок процедура (из багрепорта), ни с твоими символами, ни с русскими буквами. чарсет коннекта - utf8.
если у тебя чарсет коннекта win1251 - конечно будет ошибка на твоих символах.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189084
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvесли у тебя чарсет коннекта win1251

не должно влиять на запрос без литералов типа update set column1=column2

если там конечно нет returning
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189102
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

я могу допустить глюк с unicode_fss -> utf8, но в примерах процедур чарсеты переменных и столбцов совпадают.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189118
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проделал все сначала, подытоживаю.

1. Коннект UNICODE_FSS.
2. Создаю новое поле
Код: sql
1.
PTX_VALUE_UTF VARCHAR(8191) CHARACTER SET UTF8

3. Делаю апдейт
Код: sql
1.
update PROPS_TXT set PTX_VALUE_UTF = PTX_VALUE

4. В процедуре к переменной и результату добавляю character set utf8 .
5. Запрос из процедуры работает корректно
Код: sql
1.
select yname from get_tovar_name_new_2



Причем запрос работает на коннекте и UNICODE_FSS, и UTF8. Думаю, что проблема решена. Всем спасибо за помощь.

p.s. Не совсем понятно, зачем в процедуре указывать character set utf8, если и поле utf8, и коннект utf8, но без этого set'а не работает.

p.p.s. Того же результата удалось добиться через апдейт существующего поля PTX_VALUE на UTF8 вот так:
Код: sql
1.
2.
3.
4.
5.
update RDB$FIELDS set
RDB$FIELD_LENGTH = 32764,
RDB$CHARACTER_LENGTH = 8191,
RDB$CHARACTER_SET_ID = 4
where RDB$FIELD_NAME = 'RDB$3296'

IBExpert не поругался, запрос из процедуры работает.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189129
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloНе совсем понятно, зачем в процедуре указывать character set utf8, если и поле utf8, и коннект utf8, но без этого set'а не работает.
потому что DECLARE VARIABLE без явного указания чарсета берет для строк дефолтный чарсет базы, который в данном случае win1251. И туда никак не лезут некириллические символы.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189130
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloНе совсем понятно, зачем в процедуре указывать character set utf8, если и поле utf8, и коннект utf8
если у базы дефолтный чарсет utf8 - то низачем не надо указывать. Сервер его автоматом укажет. А если ты вдруг его и указал, то по крайней мере IBE этот дефолтный чарсет не будет показывать, ибо ни к чему это.
Например, процедура из багрепорта у меня в ИБЕ выглядит как
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or alter procedure GET_TOVAR_NAME_NEW_2
returns (
    YNAME varchar(8191))
as
declare variable S varchar(8191);
begin
  select pr.ptx_value_utf
  from props_txt_2 pr
  where pr.ptx_id = 970952385001
  into :s;
  yname = :s; -- here is an error
  suspend;
end


где чарсет yname и s ? нет его. он равен дефолтному для БД.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189131
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько правомочно и безопасно решение проблемы через апдейт?
Код: sql
1.
2.
3.
4.
5.
update RDB$FIELDS set
RDB$FIELD_LENGTH = 32764,
RDB$CHARACTER_LENGTH = 8191,
RDB$CHARACTER_SET_ID = 4
where RDB$FIELD_NAME = 'RDB$3296'
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189140
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarcelloНасколько правомочно и безопасно решение проблемы через апдейт?
неправомочно и небезопасно (а в 3.0 еще и запрещено).
- апдейт системных таблиц не обновляет данные. То есть, данные останутся в старом чарсете, а у столбца будет новый. И не факт, что данные отконвертируются в новый формат

правильное решение - добавить столбец с правильным чарсетом, отконвертировать данные. Или - пересоздать базу с правильным чарсетом всего (из скрипта), перелить данные из старой в новую.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189166
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

а если так:
1. Создать новое поле в UTF8.
2. Сделать апдейт.
3. Удалить старое поле.
4. Переименовать новое поле в старое имя.

В приложении много мест, которые пишут данные в то поле. Хотелось бы минимизировать изменения, не тронув приложение.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189181
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marcello,

так будет гемор с зависимостями. придется "деактивировать" в ibe процедуры и триггеры, которые ссылаются на этот столбец.
База большая? Может быть проще целиком ее откопировать?
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189209
Marcello
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Процедура всего одна, триггеров на поле нет. Если других противопоказаний нет к этим 4 шагам, то так и сделаю. Спасибо.
...
Рейтинг: 0 / 0
Помогите с UNICODE_FSS
    #39189278
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТо есть, данные останутся в старом чарсете, а у столбца будет новый. И не факт, что данные отконвертируются в новый формат

update table set column = column

или даже update table set column = column || ''
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с UNICODE_FSS
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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