powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 2.5.5 проблема со столбцами UTF8
11 сообщений из 61, страница 3 из 3
FB 2.5.5 проблема со столбцами UTF8
    #39989785
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
да не, при включённых настройках совместимости всё будет работать.
Речь не про то, что нельзя "побырому" смигрировать на четвёрку. "Для посмотреть" или "потому, что перспективно".
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #39989793
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисКак по мне, то в современных условиях нужны только две кодировки UTF-8 и OCTETS для
бинарных данных.

Причём вторая тоже сомнительна из-за появления (VAR)BINARY, который может поменять свою
внутреннюю сущность. Это сейчас он просто хак из-за того, что половина движка во имя
взадсовместимости не поддерживает подтипы для строковых полей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40015941
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

К сожалению, на форуме нельзя прикрепрять файлы более 150килобайт. В линке база с непонятными артефактами .
В ней есть проекция VW_ARTIKEL_PG. Если ее фетчить до конца, то выкинется Arithmetic exception. Связанные с ней таблицы фенчатся нормально. Если ее удалить и создать заново, то ошибка исчезает.
Вопрос, что могло привести к подобным дефектам? И это единичный случай (Именно на этой проекции).
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40015945
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svdчто могло привести к подобным дефектам?

Использование литералов в тексте представления.
Изменение структуры таблиц на которых она построена.

Нет, баз я не качал и не открывал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40061956
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
повторилась ошибка с греческой буквой µ.

База данных лежит тут.

В таблице ARTIKEL имеет следующую структуру:
Код: plsql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
CREATE TABLE ARTIKEL (
    ARTIKELCODE                  VARCHAR(20) NOT NULL,
    GENERICID                    INTEGER DEFAULT 0,
    NAME                         VARCHAR(100) CHARACTER SET UTF8,
    DFORM                        CHAR(30) CHARACTER SET UTF8,
    PEINHEIT                     VARCHAR(10) CHARACTER SET UTF8,
    PACKSIZE                     INTEGER DEFAULT 0,
    HERSTELLER                   VARCHAR(20),
    STRENGTH                     VARCHAR(30),
    FLAVOUR                      VARCHAR(10),
    BARCODE                      VARCHAR(20),
    CD                           INTEGER DEFAULT 0,
    ISTANZAHL                    INTEGER,
    FREIANZAHL                   INTEGER,
    MINMENGE                     INTEGER,
    MAXMENGE                     INTEGER,
    GNAME                        VARCHAR(100) CHARACTER SET UTF8,
    MINLAGERTEMP                 INTEGER,
    MAXLAGERTEMP                 INTEGER,
    FLAGS                        VARCHAR(11),
    MAXSCHACHT                   INTEGER,
    MINSCHACHT                   INTEGER DEFAULT 0,
    MINPACKMD                    INTEGER DEFAULT 0,
    AHT                          FLOAT DEFAULT 0.0,
    SAISON                       VARCHAR(3) DEFAULT '',
    UNFIT                        VARCHAR(11) DEFAULT 'M' NOT NULL,
    BREITE                       INTEGER,
    HOEHE                        INTEGER,
    TIEFE                        INTEGER,
    GEWICHT                      FLOAT,
    DELETEFLAG                   VARCHAR(1),
    STOCKLOCATIONID              VARCHAR(50) CHARACTER SET UTF8,
    MACHINELOCATION              VARCHAR(50) CHARACTER SET UTF8,
    SERIALNUMBERSINCEEXPIRYDATE  TIMESTAMP DEFAULT '01.01.1980',
    LASTUPDATE                   TIMESTAMP DEFAULT '01.01.1980',
    SBTYPE                       SMALLINT,
    SBDZ                         FLOAT,
    MAXSCHACHTBER                FLOAT,
    LAST_MS_CHANGE               TIMESTAMP,
    R$ID                         BIGINT
);




отображает все без проблем для записи с ARTIKELCODE=5012616173004 (первая запись, если сортировать по имени).
Таблица используется в проеции VW_ARTIKEL_PGЮ
Код: plsql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
CREATE OR ALTER VIEW VW_ARTIKEL_PG(
    NAME,
    FORM,
    PACKSIZE,
    ARTIKELCODE,
    ISTANZAHL,
    FREIANZAHL,
    FLAGS,
    GENERICKEY,
    MAXSCHACHT,
    MINMENGE,
    MAXMENGE,
    MINLAGERTEMP,
    MAXLAGERTEMP,
    BARCODE,
    CD,
    AHT,
    UNFIT,
    DELETEFLAG,
    SERIALNUMBERSINCEEXPIRYDATE)
AS
select
    case coalesce(a.GName,'')
      when ('') then a.Name
      else a.GName
    end || ' ' || coalesce(a.STRENGTH,''),
    a.DForm As Form,
    a.Packsize,
    a.artikelcode,
    a.IstAnzahl,
    a.FreiAnzahl,
    a.Flags,
    g.generickey,
    MaxSchacht,
    a.MinMenge,a.MaxMenge,a.MinLagerTemp,a.MaxLagerTemp,a.barcode,
    coalesce(a.CD,0),
    a.Aht,
    a.unfit,
    a.deleteflag,
    A.serialnumbersinceexpirydate
  from ARTIKEL a, GENERICS g
    where a.Artikelcode not in('','-1','0','?') and
          a.Artikelcode not starting with '@'   and
          a.genericid = g.id
;



Если фетчить проецию VW_ARTIKEL_PG, то выкидывает ошибку, хотя таблица отображается без каких либо проблем:
cannot transliterate character between character set:
Код: plsql
1.
2.
3.
SQLCode: -802
SQLState:22018
GDSCode:335544321



Firebird 2.5.9.27139
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40061966
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

Вот это тоже фетчится без проблем ?
Код: sql
1.
2.
3.
4.
5.
6.
select
    case coalesce(a.GName,'')
      when ('') then a.Name
      else a.GName
    end || ' ' || coalesce(a.STRENGTH,'')
  from ARTIKEL a
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40061980
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

да, запрос отобрадает без проблем. Прямо в первой позиции находится проблемная запись без каких либо Arithmetics exception.
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40062013
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

а если чарсет коннекта не utf8, а ISO8859_1 ?

Насколько я вижу, в полях GName и Name последняя буква (греческое мю ?) не является буквой кодировки ISO8859_1, отсюда проблема транслитерации.

VW_ARTIKEL_PG была создана в коннекте с чарсетом ISO8859_1 и поэтому содержит строковые литералы в этом чарсете.
Вот соотв. часть BLR (21 - это charset id для ISO8859_1):
Код: plaintext
1.
2.
3.
                        blr_eql,
                           blr_field, 1, 11, 'A','R','T','I','K','E','L','C','O','D','E',
                           blr_literal, blr_text2, 21,0, 0,0,

Когда COLEASECE сравнивает GName (UTF8) с пустой строкой в ISO8859_1 - оно приводит GName к ISO8859_1 и получает ошибку транслитерации.
Не буду сейчас выяснять, к какому чарсету нужно было кого приводить, но сейчас оно вот так работает.
Чтобы это исправить, достаточно пересоздать VW_ARTIKEL_PG в коннекте с чарсетом UTF8.
Или явно указывать чарсет литералов (_utf8 ''), но это нехорошо выглядит, как по мне.
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40062023
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13.04.2021 13:11, hvlad пишет:
> Или явно указывать чарсет литералов (_utf8 ''), но это нехорошо выглядит, как по мне.

вполне нормально оно выглядит.
мы для литералов пользуем _win1251.
и не нужно перекодировать метаданные при миграции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40062066
svd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Спасибо большое. Это вносит некоторое понимание, почему после перекомпиляции вдруг начинает работать. Хотя нужно проверить всю цепочку наших апдейтов - в один момент происходит удаление всех триггеров, проекций и процедур и потом восстановление удаленных из скрипта. Вероятно там как раз соединение идет по ISO8859, а не по UTF8.
...
Рейтинг: 0 / 0
FB 2.5.5 проблема со столбцами UTF8
    #40062103
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svd,

непонятно, зачем в таблице половина строк без кодировки (или с дефолтной кодировкой БД), и половина - с UTF8.
Такое впечатление, что нечем развлечься. :-)
Если делается перевод на utf8, то переводить надо все метаданные.

p.s. про приколы типа DELETEFLAG VARCHAR(1) я уж вообще молчу.
...
Рейтинг: 0 / 0
11 сообщений из 61, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 2.5.5 проблема со столбцами UTF8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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