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

Подскажите можно ли внести исправления самостоятельно и что для этого нужно сделать (если скомпилять свою fbintl, то где её взять)?

п.с. параллельно этому посту зарегистрирую баг в firebird issue-tracker-e
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36838812
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, debose!
You wrote on Thu, 09 Sep 10 16:18:32 GMT:

debose d> п.с. параллельно этому посту зарегистрирую баг в firebird issue-tracker-e
2.0.Х специально из-за этого вряд ли кто станет ковырять,
(имхо)

обновить версию не хочешь?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36838821
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, так на последней и тестирую. Баг проявляется в 2.5.

Просто Collation Chart нашёлся только для 2.0.3 версии, вот на него и дал ссылку. Насколько я понимаю с тех пор там ничего особо не изменилось по части латышского.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36838981
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а мне вот интересно, почему все остальные латышские пользователи этого коллейта работают и не жалуются...
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839089
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> а мне вот интересно, почему все остальные латышские пользователи этого коллейта работают и не жалуются...

Тупо не пользуют акцентированные символы?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839092
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrа мне вот интересно, почему все остальные латышские пользователи этого коллейта работают и не жалуются... если есть сомнения - можно ведь спросить Яниса. Да и у нас в фирме есть носители языка - могу уточнить.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839324
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамТупо не пользуют акцентированные символы?
не верю (с)

oleg_mмогу уточнить
сделай, плиз

Дело в том, что этот коллейт делался (в яффиле, ЕМНИП) как раз по заказу латышей. Так что странно слышать претензии много лет спустя.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839350
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitroleg_mмогу уточнить
сделай, плиз

Дело в том, что этот коллейт делался (в яффиле, ЕМНИП) как раз по заказу латышей. Так что странно слышать претензии много лет спустя.
а спросить-то что? :-)
CORE-3131 ?
Вопрос звучит так, если я правильно перевел:
"диакретики должны обязательно идти после простых букв, а не вперемешку, (как сейчас делает FB)"

btw, гугл в первом десятке выдал
© Текст: Доктор наук Инна Друвиете, Латвийский Университет; Доктор наук Байба Кангаре, Стокгольмский Университет; Институт Латвии, 2001 г.


вроде как верно говорит - все диакретики после простых букв. ну так вроде здесь так и есть...

debose - покажите, как выглядит запрос, в котором диакретики не отсортированы. (Collate в сортировке указан?) К записи в трекере полезно прилагать скрипт, воспроизводящий ситуацию.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839377
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фраза в тикете, что основные буквы и диакретики идут вперемешку (не отсортированы) не корректна. На самом деле, вопрос стоит по-другому. Сейчас последовательность сортировки такая: a, A, a', A', b, B. В тикете же требуется так: a, a', A, A', b, B (ну или наоборот, от заглавных к строчным), т.е. чтобы в сортировке не перемежались заглавные и строчные буквы разной диакретичности. Я таких требований в ссылке на алфавит никак не наблюдаю.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839393
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr, ок, спрошу, как они в офисе появятся.

Не поленился, и скопировал все "их закорючки" (по-доброму, конечно ) по буквам a и e -
в Excel, и отсортировал в прямом и обратном порядке.

Excel с тобой (и с FB) - согласен.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839462
Janex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Правильно так - диакритики идут после простых букв,
например (незнаю выдно ли всем будет шрифт):

АААА
аааа
āāāā
BBBB
bbbb
CCCC
cccc
čččč

В FB вроде всё правильно на мои взгляд
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839529
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Janex,

под твой пример подходят оба оспариваемых варианта :-) Добавь в него "долгое а" заглавное и "мягкое че" заглавное.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839629
Janex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И так:
вот как сортирует excel:

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

То что диакретики идут сразу после простых букв, ето правильно, НО неправильно по
регистру - сперва должны идти большие буквы. Можбить и чтото в самом excell-е в какихто
настроиках ето можно указать, не в курсе ...

Правилпно будет так:

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

Тоесть правильно так как написано в CORE-3131:
http://tracker.firebirdsql.org/browse/CORE-3131

Наверно ошибся нашёт правильнои сортировки в FB, наверно тогда
неправильно, непроверял, правильно на 100% ето как в CORE-3131 написано.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839811
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr
Дело в том, что этот коллейт делался (в яффиле, ЕМНИП) как раз по заказу латышей. Так что странно слышать претензии много лет спустя.

Лично мы долгое время сидели на FB 1.5, а там вместо латышской кодовой страницы использовалась турецкая и танцы с бубном. Подробности того, почему это работало сейчас выяснить будет затруднительно.

Не так давно перешли на WIN1257 и столкнулись с описанной проблемой.

oleg_m
Вопрос звучит так, если я правильно перевел:
"диакретики должны обязательно идти после простых букв, а не вперемешку, (как сейчас делает FB)"

Именно.

CORE-3131 - это и есть мой вчерашний кейс.

oleg_mbtw, гугл в первом десятке выдал
© Текст: Доктор наук Инна Друвиете, Латвийский Университет; Доктор наук Байба Кангаре, Стокгольмский Университет; Институт Латвии, 2001 г.

вроде как верно говорит - все диакретики после простых букв. ну так вроде здесь так и есть...


oleg_mdebose - покажите, как выглядит запрос, в котором диакретики не отсортированы. (Collate в сортировке указан?) К записи в трекере полезно прилагать скрипт, воспроизводящий ситуацию.

Скрипт приложу чуть позже. По нему станет понятно, почему некоторые примеры сейчас работают у всех, а некоторые нет.

dimitrфраза в тикете, что основные буквы и диакретики идут вперемешку (не отсортированы) не корректна. На самом деле, вопрос стоит по-другому. Сейчас последовательность сортировки такая: a, A, a', A', b, B. В тикете же требуется так: a, a', A, A', b, B (ну или наоборот, от заглавных к строчным), т.е. чтобы в сортировке не перемежались заглавные и строчные буквы разной диакретичности. Я таких требований в ссылке на алфавит никак не наблюдаю.

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

Проблемы начнутся, с такой последовательностью:
FBaa
āb
ac


Если отсортировать в FB, то получится так как приведено в примере.

А должно быть так:
Excelaa
ac
āb


Аналогичные проблемы и с буквами E I U.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839872
oleg_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrСейчас последовательность сортировки такая: a, A, a', A', b, B. В тикете же требуется так: a, a', A, A', b, B (ну или наоборот, от заглавных к строчным)

в общем, хз. с первой попытки она подтвердила слова Яниса, но потом начала сомневаться :-)
может поэтому - раньше никто и не жаловался?

[11:43:23] Oleg Matveyev: вопрос такой: как правильно сортировать список если в нем есть и заглавные/строчные и диакрит ?
[11:43:41] Oleg Matveyev: например
[11:44:02] Oleg Matveyev: так a, A, a', A'
[11:44:12] Oleg Matveyev: или так a, a', A, A'
[11:46:54] Vita: второй вариант
[11:47:01] Oleg Matveyev: спасибо!
[11:47:11] Vita: да не за что (sun)
[11:48:05] Vita: первый вариант тоже будет правильно - главное чтобы длинные буквы стояли за короткими
[11:49:05] Oleg Matveyev: а как же так?
[11:49:14] Oleg Matveyev: нет однозначного толкования?
[11:50:53] Vita: если честно - никогда не обращала внимания на это. но различия между большой буквой и маленькой же нет

Жирным выделил я.

Говорит носитель языка, письма (на латышском) в компании именно она пишет. Что впрочем, не гарантирует ее стопроцентную грамотность.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36839984
Janex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в родне имеются предподователи, попытаюсь наидти какуюто
толковую по латышкому языку.
Если наиду, дам знать :)
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840012
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Janex!
You wrote on Fri, 10 Sep 10 09:33:35 GMT:

Janex J> У меня в родне имеются предподователи, попытаюсь наидти какуюто
J> толковую по латышкому языку.
J> Если наиду, дам знать :)Janex, а может есть какие-то стандарты на эту тему?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840087
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, мне кажется мы отошли от темы. Вопрос не в том, как правильно сортировать заглавные и строчные буквы - в это плане ситуация едва ли отличается от английского языка.

Проблема в том, что некоторые буквы с диакритическими знаками перемешиваются с буквами без этих знаков.

А вопрос топика был следующий: можно ли это как-то исправить своими силами?
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840097
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose
А вопрос топика был следующий: можно ли это как-то исправить своими силами?

Насколько я понимаю, достаточно внести изменения в src/intl/collations/win1257_lv.h и
пересобрать птицу.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840098
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, эта проблема была характерна не только для Firebird.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840150
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
debose
А вопрос топика был следующий: можно ли это как-то исправить своими силами?

Насколько я понимаю, достаточно внести изменения в src/intl/collations/win1257_lv.h и
пересобрать птицу.


Dimitry Sibiryakov, спасибо. Не подскажете, пересобирать придётся всю птицу, или там есть возможность пересобрать только fbintl?
Буду курить исходники пытаясь понять что там к чему и надеясь, что кто-нибудь из разработчиков внемлет отчёту CORE-3131 и решит эту проблему.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840165
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчет вопроса строчная/заглавная - это все фигня. Кто идет первой - вопрос вкуса. Главное, чтобы не было вот такой ерунды: A->B->C->a->b->c. У нас во всех коллейтах первой из пары идет строчная буква, нехай оно так и остается.

кстати, я был неточен насчет нашего порядка сортировки. Диакритик идет за базовым знаком только при полном совпадении строк в их accent-insensitive форме. Иначе все становится веселее: "abc" -> "ābc" -> "acd".

ради интереса посмотрел на другие таблицы на том же сайте collation charts. Наш вариант совпадает с MSSQL (откуда он и был списан яффилом, насколько я помню). Причем locale для старых виндов (до висты) тоже аналогичен (откуда и был предположительно скопирован в MSSQL). Начиная с висты винды считают диакритики (причем не все, а только долготу и мягкость - верхние дефис и "крышечку") отдельным символом. Аналогично считает оракл. Кто тут прав - хрен разберешь :-)

но даже если считать диакритики отдельными, то сортироваться они все равно будут по-экселевскому: a -> A -> ā -> Ā. Разница будет лишь в вышеприведенном примере: "abc" -> "acd" -> "ābc". Т.е. не будет диакритиков вперемешку с базовыми символами. Но надо ли автору именно это, я не знаю.

как добиться варианта от Janex - вопрос интересный. Для этого вес регистра надо делать выше веса акцента. А это, насколько я в курсе, противоречит дизайну многуровневых коллейтов. В том же юникоде четко описано, что 2-й уровень это акцент, а 3-й - регистр. К тому же я пока не увидел ни одного продукта, чей порядок сортировки соответствовал бы требуемому. Так что склонен проявить упрямство :-)
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840181
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debose,

если я угадал в своем предпоследнем абзаце выше - то сделаю так без проблем. Но в официальный 2.5.0 это уже не попадет, только в 2.5.1 или в снапшоты.
...
Рейтинг: 0 / 0
Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
    #36840186
debose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr
ради интереса посмотрел на другие таблицы на том же сайте collation charts. Наш вариант совпадает с MSSQL (откуда он и был списан яффилом, насколько я помню). Причем locale для старых виндов (до висты) тоже аналогичен (откуда и был предположительно скопирован в MSSQL). Начиная с висты винды считают диакритики (причем не все, а только долготу и мягкость - верхние дефис и "крышечку") отдельным символом. Аналогично считает оракл. Кто тут прав - хрен разберешь :-)


Я чуть выше приводил ссылочку , где описывалась история аналогичного бага в MS SQL 2005, и пару примеров иллюстрирующих суть проблемы. А порядок сортировки заглавных и строчных букв, пусть остаётся таким же как был - а то клиенты ещё и за это съедят.
...
Рейтинг: 0 / 0
Ошибка с 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
44 сообщений из 44, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка с COLLATE WIN1257_LV, что можно сделать для исправления?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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