具有土耳其语排序规则的Firebird UTF-8数据库

时间:2018-12-08 14:29:29

标签: utf-8 firebird collation firebird2.5 turkish

我有UTF-8数据库,其中存储了土耳其语文本数据。土耳其语转换为大写或小写时会出现问题。与其他基于拉丁字符的语言不同,土耳其语对“ i” “ I” 字符具有不同的转换规则。这个问题在RDBMS产品中非常普遍。大多数商业的和一些开源的RDBMS解决了这个问题。尽管Firebird在土耳其开发人员中非常受欢迎,但事实并非如此。顺便说一句,当数据库字符集为ISO8859-9(土耳其语)时,这不是问题。

“ i” ->大写字母-> “İ”

“ı” ->大写-> “我”

据我所知,firebird没有unicode / turkish的排序规则。

因此,应将“ ikna” 大写为“ IKNA” ,将其设置为“İKNA”

有人针对这种情况有解决方法吗?具体来说,我想对文本数据进行大小写刺激的 Like 搜索。

内容丰富 http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html

1 个答案:

答案 0 :(得分:0)

Ceyhun,您尝试过将字符集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;

结果是:

'İsmailIlgın''İSMAİLILGIN''ismailılgın'