powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
19 сообщений из 44, страница 2 из 2
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840192
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr, спасибо.

Я сегодня в течение нескольких часов ещё раз всё перепроверю (на всякий), сделаю тестовый скрипт для проверки и прикреплю сюда и на FB-трекер.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840204
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose
Не подскажете, пересобирать придётся всю птицу, или там есть возможность пересобрать
только fbintl?

Надёжнее пересобрать всю. Чтобы не было противоречий в RTL.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840238
Janex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтото туплю сегодня, думал правильно, написал не
так, наверно ето после вчерашнего пиво :)

Поговорил тут с умными людми И - по латыскои граматике
правильно вот так:

AA
aa
ĀĀ
āā
CC
cc
ČČ
čč

Ето окончательно правильно и точно как в CORE-3131

Как там по правилам MS SQL или Oracle незнаю, но по граматике ето вот так ...
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36841326
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скрипт для воспроизведения проблемы. В поле TEXT - содержится текст для проверки. В поле SORTIROVKA - указан верный индекс, который должен быть при верной сортировке.
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
SET NAMES WIN1257;

CREATE TABLE TEST_LV_SORT (
    TEXT        VARCHAR( 30 ) COLLATE WIN1257_LV,
    SORTIROVKA  VARCHAR( 15 )
);

INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ab', '1');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Az', '2');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Āb', '3');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Āz', '4');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Cb', '5');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Cz', '6');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Čb', '7');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Čz', '8');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Eb', '9');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ez', '10');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ēb', '11');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ēz', '12');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Gb', '13');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Gz', '14');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ģb', '15');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ģz', '16');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ib', '17');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Iz', '18');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Īb', '19');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Īz', '20');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Kb', '21');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Kz', '22');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ķb', '23');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ķz', '24');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Lb', '25');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Lz', '26');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ļb', '27');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ļz', '28');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Nb', '29');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Nz', '30');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ņb', '31');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ņz', '32');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Sb', '33');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Sz', '34');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Šb', '35');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Šz', '36');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ub', '37');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Uz', '38');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ūb', '39');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Ūz', '40');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Zb', '41');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Zz', '42');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Žb', '43');
INSERT INTO TEST_LV_SORT (TEXT, SORTIROVKA) VALUES ('Žz', '44');

COMMIT WORK;

Для проверки был создан отдельный ACCENT SENSITIVE COLLATION:
Код: plaintext
1.
2.
3.
CREATE COLLATION test_lv
   FOR win1257 FROM WIN1257_LV
   NO PAD CASE INSENSITIVE ACCENT SENSITIVE;

Вот запрос, которым проверялось:
Код: plaintext
1.
2.
3.
select *
from TEST_LV_SORT tls
order by tls.text COLLATE test_lv;

К слову, если вместо test_lv использовать WIN1257_LV - результат не меняется.

К посту приложен скрипт, содержащий всё вышеперечисленное. Скрипт сохранён в кодировке UTF-8.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142293
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та же беда и с UTF8. Причём, судя по всему бага в самом ICU.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142520
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose,

тогда проблему надо решать на гос. уровне.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142530
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseТа же беда и с UTF8. Причём, судя по всему бага в самом ICU.А правильно ли я понимать, что вы пробовали сделать коннект с чарсетом = UTF8 к базе, в которой таблица имеет кодировку win1257, и получили 22 расхождения ?
Вот скрипт:
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
shell del C:\MIX\firebird\QA\fbt-repo\tmp\c3131.fdb 2>nul;
set names utf8;
create database 'localhost/3333:C:\MIX\firebird\QA\fbt-repo\tmp\c3131.fdb';
commit;

set bail on;

recreate table test_lv_sort (
    text      varchar(30) character set win1257 collate win1257_lv,
    sort_idx  varchar(15)
);

insert into test_lv_sort values('Ab', '1');
insert into test_lv_sort values('Az', '2');
insert into test_lv_sort values('Āb', '3');
insert into test_lv_sort values('Āz', '4');
insert into test_lv_sort values('Cb', '5');
insert into test_lv_sort values('Cz', '6');
insert into test_lv_sort values('Čb', '7');
insert into test_lv_sort values('Čz', '8');
insert into test_lv_sort values('Eb', '9');
insert into test_lv_sort values('Ez', '10');
insert into test_lv_sort values('Ēb', '11');
insert into test_lv_sort values('Ēz', '12');
insert into test_lv_sort values('Gb', '13');
insert into test_lv_sort values('Gz', '14');
insert into test_lv_sort values('Ģb', '15');
insert into test_lv_sort values('Ģz', '16');
insert into test_lv_sort values('Ib', '17');
insert into test_lv_sort values('Iz', '18');
insert into test_lv_sort values('Īb', '19');
insert into test_lv_sort values('Īz', '20');
insert into test_lv_sort values('Kb', '21');
insert into test_lv_sort values('Kz', '22');
insert into test_lv_sort values('Ķb', '23');
insert into test_lv_sort values('Ķz', '24');
insert into test_lv_sort values('Lb', '25');
insert into test_lv_sort values('Lz', '26');
insert into test_lv_sort values('Ļb', '27');
insert into test_lv_sort values('Ļz', '28');
insert into test_lv_sort values('Nb', '29');
insert into test_lv_sort values('Nz', '30');
insert into test_lv_sort values('Ņb', '31');
insert into test_lv_sort values('Ņz', '32');
insert into test_lv_sort values('Sb', '33');
insert into test_lv_sort values('Sz', '34');
insert into test_lv_sort values('Šb', '35');
insert into test_lv_sort values('Šz', '36');
insert into test_lv_sort values('Ub', '37');
insert into test_lv_sort values('Uz', '38');
insert into test_lv_sort values('Ūb', '39');
insert into test_lv_sort values('Ūz', '40');
insert into test_lv_sort values('Zb', '41');
insert into test_lv_sort values('Zz', '42');
insert into test_lv_sort values('Žb', '43');
insert into test_lv_sort values('Žz', '44');
COMMIT;

create collation custom_w1257_ci_as
   for win1257 from win1257_lv
   no pad case insensitive accent sensitive;

create collation custom_utf8_ci_as
   for utf8 from unicode 
   no pad case insensitive accent sensitive;
commit;

set count on;
set echo on;

select s.*
from (
    select s.*, row_number()over() as sequential_idx
    from (
        select s.*
        from test_lv_sort s
        order by s.text collate custom_w1257_ci_as
    ) s
) s
where s.sort_idx<>s.sequential_idx
;


select s.*
from (
    select s.*, row_number()over() as sequential_idx
    from (
        select s.*
        from test_lv_sort s
        order by cast(s.text as varchar(30) character set utf8) collate custom_utf8_ci_as
    ) s
) s
where s.sort_idx<>s.sequential_idx
;
И вот результат:
Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
select s.*
from (
select s.*, row_number()over() as sequential_idx
from (
  select s.*
  from test_lv_sort s
  order by s.text collate custom_w1257_ci_as
) s
) s
where s.sort_idx<>s.sequential_idx
;
Records affected: 0


select s.*
from (
select s.*, row_number()over() as sequential_idx
from (
  select s.*
  from test_lv_sort s
  order by cast(s.text as varchar(30) character set utf8) collate custom_utf8_ci_as
) s
) s
where s.sort_idx<>s.sequential_idx
;

Āb                             3                                   2 
Az                             2                                   3 
Čb                             7                                   6 
Cz                             6                                   7 
Ēb                             11                                 10 
Ez                             10                                 11 
Ģb                             15                                 14 
Gz                             14                                 15 
Īb                             19                                 18 
Iz                             18                                 19 
Ķb                             23                                 22 
Kz                             22                                 23 
Ļb                             27                                 26 
Lz                             26                                 27 
Ņb                             31                                 30 
Nz                             30                                 31 
Šb                             35                                 34 
Sz                             34                                 35 
Ūb                             39                                 38 
Uz                             38                                 39 
Žb                             43                                 42 
Zz                             42                                 43 

Records affected: 22
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142648
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидdeboseТа же беда и с UTF8. Причём, судя по всему бага в самом ICU.А правильно ли я понимать, что вы пробовали сделать коннект с чарсетом = UTF8 к базе, в которой таблица имеет кодировку win1257, и получили 22 расхождения ?

Простите, но этого вопроса уже я не понял. Точнее, мы так не пробовали.
Я пробовал создать базу с чарсетом UTF8. В ней таблицу TEST_LV_SORT. И подключаться к этой базе как UTF8.

Изначально этот топик создавался для проблемы сортировки латышских букв с кодировкой win1257. В тот раз эту проблему исправили любезные разработчики.)

Прошли годы, мы (я) перешли с win1257 на utf8 и снова столкнулись с тем, что акцентированные латышские буквы сортируются некорректно.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142649
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема проявляется с дефолтной инсталляцией Firebird. Проверял с коллейтами UTF8 и UNICODE.

Коллеги пробовали подсунуть Firebird-у версию ICU поновее (4.8 и 5.3) - проблема та же. Об этом кстати сделали баг-репорт core-4548 .
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142651
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose,

и кто, как вы думаете, будет исправлять ICU?
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142672
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv? )
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142729
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvdebose,
и кто, как вы думаете, будет исправлять ICU?
Видимо самому придётся. :D Писать запрос в Юникод консорциум (ICU именно туда отсылает по поводу collate).

Насчёт того что ошибка в ICU я отказываюсь верить. Ведь если ошибка именно там - значит она во всех продуктах использующих ICU, и в linux и MacOs и iOs и Android. А такого не может быть, потому что кто-нибудь давно б уже заметил и исправил. Скорее всего я где-то что-то напутал пока проверял. Чуть позже посмотрю как работает сортировка этих букв в андройде (на всякий случай). И буду разбираться подробнее.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142773
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил в андроид и на MacOs - сортирует неправильно (Ā и A вперемешку). Я в шоке . Целая страна уже много лет использует продукты работающие некорректно. А в продуктах Microsoft (Windows, Excel) кстати, всё в порядке.

Для себя решили попробовать собрать свою версию ICU с исправлением и подсунуть её Firebird-у. Будет своя локальная корректная версия. Когда получится - сообщу здесь. И отправлю правила верной сортировки в трекер Firebird.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142774
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseИ отправлю правила верной сортировки в трекер Firebird.
Правильный трекер это трекер ICU. К Fireird вопрос отношения не имеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142779
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovdeboseИ отправлю правила верной сортировки в трекер Firebird.
Правильный трекер это трекер ICU. К Fireird вопрос отношения не имеет.
Да нет. Правильный трекер - это трекер unicode.org в данном случае. Не знаю сколько времени (лет?) у них уйдёт на исправление (мне тут кстати реально любопытно, что проще - поменять международный стандарт или правила грамматики в одной маленькой стране?:D ), и сколько ещё пройдёт до тех пор пока эти исправления попадут в ICU, а затем ещё и в Firebird. Последнее, я подозреваю на моём веку не случится. :D

Про firebird - я понимаю что при сравнении стандартов и здравого смысла обычно побеждают стандарты. Но инфу на всякий случай заброшу.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142781
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseПро firebird - я понимаю что при сравнении стандартов и здравого смысла
обычно побеждают стандарты.
Дело не в стандартах и не здравом смысле. Никто не будет распространять нестандартную
сборку стандартной библиотеки. Ибо это чревато боком.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142785
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovdeboseПро firebird - я понимаю что при сравнении стандартов и здравого смысла
обычно побеждают стандарты.
Дело не в стандартах и не здравом смысле. Никто не будет распространять нестандартную
сборку стандартной библиотеки. Ибо это чревато боком.
Звучит логично.
А вы разве ICU сами не собираете?

п.с. там надо подправить 1 txt файл ресурсов либы. (например такой http://source.icu-project.org/repos/icu/icu/tags/release-53-1/source/data/coll/lv.txt) Я только предполагаю что либу надо пересобрать. Может есть и проще способ.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142788
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseА вы разве ICU сами не собираете?
В 3.0 используется стандартная сборка с официального сайта, насколько я знаю. После
соответствующих дебатов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #39142789
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deboseНе знаю сколько времени (лет?) у них уйдёт на исправлениеОткуда такой пессимизм ?
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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