Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / execute block + UTF8 проблемы / 25 сообщений из 27, страница 1 из 2
13.12.2016, 16:22
    #39365904
rjkz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Подключение к БД UTF8, пробую все в IBExpert. Все поля в таблицах БД Win1251, только в таблице TRANSLATE поле TEXT в UTF8.

Запрос
Код: java
1.
2.
3.
4.
5.
 select
    SP.ID,
    coalesce((select T.TEXT from TRANSLATE T where T.K_RES = 1 and T.ID_REF = SP.ID and T.LOCALE = 'de'  ),'') N_PROD
  from S_PROD SP
  order by N_PROD 



выполняется успешно, т.е. в IBExpert табличку с результатами пролистываю до конца никакой ошибки - по результатам сортировки
много десятков записей с пустым N_PROD и только последняя одна запись содержит в N_PROD немецкое слово с умляутами.
Нооо, если я оберну этот запрос в execute block:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
execute block
returns (ID int, N_PROD varchar(10000) )
as
begin

  for
  select
    SP.ID,
    coalesce((select T.TEXT from TRANSLATE T where T.K_RES = 1 and T.ID_REF = SP.ID and T.LOCALE = 'de'  ),'') N_PROD
  from S_PROD SP
  order by N_PROD

into :ID, :N_PROD
do
  suspend;
end



то при попытке пролистать до конца результаты получаю именно на последней строке ошибку:
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
Cannot transliterate character between character sets.

Поле TEXT имеет размер VARCHAR(120) CHARACTER SET UTF8

Когда я выполняю 1-й селект - то IBExpert создает под него размер VARCHAR(480)
Когда я выполняю 2-й execute block - то IBExpert создает под него размер VARCHAR(32764)

Что я делаю не так?
...
Рейтинг: 0 / 0
13.12.2016, 16:24
    #39365905
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkz
Код: java
1.
10000


8000?
...
Рейтинг: 0 / 0
13.12.2016, 16:28
    #39365908
rjkz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
wadmanrjkz
Код: java
1.
10000


8000?

Туда я вбивал уже что только можно - и 120 и 240 и 32764 и на 8000 таже проблема
...
Рейтинг: 0 / 0
13.12.2016, 16:31
    #39365914
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkzwadmanпропущено...

8000?

Туда я вбивал уже что только можно - и 120 и 240 и 32764 и на 8000 таже проблема
Добавь cast в varchar в coalesce.

rjkzIBExpert создает под него размер VARCHAR(480)
Это не эксперт "создает".
...
Рейтинг: 0 / 0
13.12.2016, 16:38
    #39365924
rjkz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
wadman,

Код: java
1.
2.
3.
4.
5.
  select
    SP.ID,
   cast(coalesce((select T.TEXT from TRANSLATE T where T.K_RES = 1 and T.ID_REF = SP.ID and T.LOCALE = 'de'  ),'') as VARCHAR(10000)) N_PROD
  from S_PROD SP
  order by N_PROD



тогда ошибка возникает сразу при выполнении - т.е. листать нечего.
...
Рейтинг: 0 / 0
13.12.2016, 16:39
    #39365926
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkzесли я оберну этот запрос в execute block:
То все увидят, что ты врёшь и чарсет подключения у тебя не utf-8.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2016, 16:46
    #39365932
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkz
Код: java
1.
as VARCHAR(10000)


Мда... Опять?
https://www.google.com/search?q=firebird maximum length utf
...
Рейтинг: 0 / 0
13.12.2016, 16:56
    #39365945
rjkz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
wadmanrjkz
Код: java
1.
as VARCHAR(10000)


Мда... Опять?
https://www.google.com/search?q=firebird maximum length utf

И как это мне поможет решить проблему?
...
Рейтинг: 0 / 0
13.12.2016, 16:57
    #39365947
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkzwadmanпропущено...

Мда... Опять?
https://www.google.com/search?q=firebird maximum length utf

И как это мне поможет решить проблему?
8000?
...
Рейтинг: 0 / 0
13.12.2016, 16:59
    #39365954
rjkz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
wadman8000?

И с 8000 тоже не работает - писал уже выше. И что за 8000 магическое число?
...
Рейтинг: 0 / 0
13.12.2016, 17:01
    #39365956
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkzwadman8000?

И с 8000 тоже не работает - писал уже выше. И что за 8000 магическое число?
Ссыль-то на что дали?

П.С. Сюда загляни: 19998482
...
Рейтинг: 0 / 0
13.12.2016, 17:04
    #39365959
rjkz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
wadman, скрины посмотри - там ясно видно что подключениt UTF8 на 2-скринах или обвести красным и опять скрин выложить?
...
Рейтинг: 0 / 0
13.12.2016, 17:18
    #39365977
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
rjkzрешить проблемуНет пока никакой проблемы, есть путаные показания пациента, без доказательств.
...
Рейтинг: 0 / 0
13.12.2016, 17:41
    #39366003
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Ivan_Pisarevskyесть путаные показания пациента
Причём он путает чарсет БД с чарсетом подключения. Да ещё и как блондинка какая-нибудь
машет скринами.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select rdb$character_set_name from mon$attachments a join rdb$character_sets c 
on a.mon$character_set_id=c.rdb$character_set_id;

RDB$CHARACTER_SET_NAME
===============================
UTF8

SQL> execute block returns (a varchar(10000)) as begin a='abc'; suspend; end^
Statement failed, SQLSTATE = HY004
Dynamic SQL Error
-SQL error code = -204
-Data type unknown
-Implementation limit exceeded
-COLUMN A

SQL> execute block returns (a varchar(50)) as begin a='abc'; suspend; end^
A
==================================================
abc


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2016, 17:57
    #39366022
vas_is_das
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Это когда запускаю одиночный селект
...
Рейтинг: 0 / 0
13.12.2016, 17:57
    #39366023
vas_is_das
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Сам селект
...
Рейтинг: 0 / 0
13.12.2016, 17:59
    #39366025
vas_is_das
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Ошибка при перемещении по результатам емли селект обернут в блок
...
Рейтинг: 0 / 0
13.12.2016, 17:59
    #39366026
vas_is_das
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
...
Рейтинг: 0 / 0
13.12.2016, 18:10
    #39366042
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
vas_is_das,

эээ... укажите
execute block
returns (ID int, N_PROD varchar(200) character set UTF8)
...
Рейтинг: 0 / 0
13.12.2016, 18:11
    #39366045
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
веселые картинки, блин.

скрипт участвующих объектов и немного даных скриптом инсертов можно приложить?

нахрена картинки?
...
Рейтинг: 0 / 0
13.12.2016, 18:22
    #39366053
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Ivan_Pisarevskyнахрена картинки?
Блондинко - это способ мышления, а не цвет волос.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2016, 18:39
    #39366061
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
Dimitry SibiryakovПричём он путает чарсет БД с чарсетом подключения.

собственно, я вот тоже подумал. Если БЕЗ указания чарсета параметры процедуры (и др. переменные) создаются с дефолтным чарсетом, то почему у Execute block должно быть иначе?

автору топика, rjkz, пример
создаем процедуру со строковым параметром без указания чарсета.
- база в win1251, чарсет win1251, параметр получает кодировку win1251
- база в win1251, чарсет utf8, параметр получает кодировку win1251

как бы, если столбец TEXT в utf8, почему не указан utf8 для параметра execute block?
...
Рейтинг: 0 / 0
13.12.2016, 18:47
    #39366067
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
kdvкак бы, если столбец TEXT в utf8, почему не указан utf8 для параметра execute block?

Там в моём листинге выше у базы чарсет NONE, а параметр тем не менее получается в UTF-8 и
без явного указания.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.12.2016, 18:48
    #39366068
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
kdvЕсли БЕЗ указания чарсета параметры процедуры (и др. переменные) создаются с дефолтным чарсетом, то почему у Execute block должно быть иначе?
патамучта EB это клиентский DSQL-запрос, а не хранимый на сервере PSQL?
...
Рейтинг: 0 / 0
13.12.2016, 20:06
    #39366142
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
execute block + UTF8 проблемы
dimitr,

не верю. автор куда уже только не тыкал, а вот в это место - вроде нет.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / execute block + UTF8 проблемы / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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