База данных Firebird UTF-8 с турецкой разборкой - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть база данных UTF-8 с сохраненными в ней текстами на турецком языке.Когда дело доходит до турецкого языка, есть проблема при преобразовании в верхний или нижний регистр.В отличие от других языков, основанных на латинских символах, турецкий язык имеет другое правило преобразования для "i" и "I" символов.Эта проблема очень распространена среди продуктов СУБД.Большинство коммерческих и некоторых СУБД с открытым исходным кодом решили эту проблему.Но не Firebird, несмотря на то, что он очень популярен среди турецких разработчиков.Кстати, это не проблема, когда набор символов базы данных ISO8859-9 (турецкий).

"i" -> верхний регистр -> "İ"

"ı" -> верхний регистр -> "Я"

Насколько я знаю, у firebird нет сопоставления для юникода / турецкого языка.

Так работает "икна" в верхнем регистре как "IKNA" когда должно быть "İKNA"

Есть ли у кого-нибудь обходное решение для таких случаев?В частности, я хочу регистр LIKE поиск по текстовым данным.

Довольно информативно http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html

1 Ответ

0 голосов
/ 26 июля 2019

Джейхун, вы пробовали набор символов WIN1254 с разбором pxw_turk?

create table test
(
    recid integer,
    name_ varchar(50) character set WIN1254 collate pxw_turk
);
commit;

insert into test(name_, recid) values('İsmail Ilgın', 1);

select
    name_,
    upper(name_),
    lower(name_)
from test;

или с использованием домена

create domain mydomain as varchar(50) character set WIN1254 collate pxw_turk;
create table test
(
    recid integer,
    name_ mydomain
);
commit;

insert into test(name_, recid) values('İsmail Ilgın', 1);

select
    name_,
    upper(name_),
    lower(name_)
from test;

И результат:

'İsmail Ilgın'' İSMAİL ILGIN '' ismail ılgın '

...