turkce karakter siralamasi

From: Levent Aksu <levent(at)leventaksu(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: turkce karakter siralamasi
Date: 2007-01-11 12:57:12
Message-ID: 45A63428.80607@leventaksu.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

Merhaba,
pg ile yeni ilgilenmeye başladım. Yeni yazılımımızı pg üzerinde
geliştirmeyi düşünüyoruz. Bu aşamada Türkçe karakterler ile ilgili
yaptığım kurcalamalar sonucunda bazı konular karanlıkta kaldı.
Veritabanının utf-8 olmasını ve tüm istemcilerin de utf-8'e göre
işlemesini istiyorum. Bu ayar ile kurduğum veritabanı sorun çıkarmadan
çalışıyor gibi. Yani utf-8 gelen veriler düzgün ve utf-8 olarak
saklanıyorlar ve geri getirilebiliyorlar. Türkçe kurallarına gore
sıralama konusuna gelindiğinde de bazı aksaklıklar haricinde sıralamayı
düzgün yapıyor gibi görünüyor. Asağıda ı-i harfleri civarinda bu
aksaklıkların ne olduğu görülebilir.

-----
select ad,lower(ad),upper(ad) from kurum order by ad
"a";"a";"A"
"A";"a";"A"
"b";"b";"B"
"B";"b";"B"
"c";"c";"C"
"C";"c";"C"
"ç";"ç";"Ç"
"Ç";"ç";"Ç"
"d";"d";"D"
"D";"d";"D"
"e";"e";"E"
"E";"e";"E"
"f";"f";"F"
"F";"f";"F"
"g";"g";"G"
"G";"g";"G"
"ğ";"ğ";"Ğ"
"Ğ";"ğ";"Ğ"
"h";"h";"H"
"H";"h";"H"
"i";"i";"I"
"I";"i";"I"
"ı";"ı";"ı"
"İ";"İ";"İ"
"j";"j";"J"
"J";"j";"J"
"k";"k";"K"
"K";"k";"K"
"l";"l";"L"
"L";"l";"L"
"m";"m";"M"
"M";"m";"M"
"n";"n";"N"
"N";"n";"N"
"o";"o";"O"
"O";"o";"O"
"ö";"ö";"Ö"
"Ö";"ö";"Ö"
"p";"p";"P"
"P";"p";"P"
"q";"q";"Q"
"Q";"q";"Q"
"r";"r";"R"
"R";"r";"R"
"s";"s";"S"
"S";"s";"S"
"ş";"ş";"Ş"
"Ş";"ş";"Ş"
"t";"t";"T"
"T";"t";"T"
"u";"u";"U"
"U";"u";"U"
"ü";"ü";"Ü"
"Ü";"ü";"Ü"
"v";"v";"V"
"V";"v";"V"
"w";"w";"W"
"W";"w";"W"
"x";"x";"X"
"X";"x";"X"
"y";"y";"Y"
"Y";"y";"Y"
"z";"z";"Z"
"Z";"z";"Z"
-----

Hatalar:

1 - "i" ve "I" nın upper/lower karşılıkları yanlış çalışıyor.
2 - "i" yi "ı" dan önce sıralıyor.

Windows üzerinde kurulum yaptığım için initdb komutunu ben elle
çalıştırmamış oldum. Kurulum sırasında otomatik olarak yapıldı herhalde.
Ancak pg_controldata komutu çalıştırıldığında veritabanının UTF8 ve
Turkish_Turkey.1254 "collation"ını kullandığını görebiliyorum. Anladığım
kadarıyla sorun da buradan kaynaklanıyor, yani karşılaştırmanın
Turkish_Turkey.utf8 gibi bir şey olması gerekiyor. Fakat böyle bir
collation ile initdb yapamıyorum, böyle bir locale'i tanımadığını söylüyor:

------
$ ./bin/initdb -E UTF8 --pgdata=data --lc-collate=tr_TR.utf8
--lc-ctype=tr_TR.utf8
initdb: geçersiz yerel adı "tr_TR.utf8"
initdb: geçersiz yerel adı "tr_TR.utf8"
Bu veritabanı sistemine ait olan dosyaların sahibi "levent" kullanıcısı
olacaktır.
Bu kullanıcı aynı zamanda sunucu sürecinin de sahibi olmalıdır.

Veritabanı kümesi Turkish_Turkey.1254 yereli ile ilklendirilecek.
------

Bu durumun çözümü var mıdır?
Kolay gelsin,
Levent Aksu

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Eşref Atak 2007-01-27 14:07:23 Belgeler
Previous Message Devrim GUNDUZ 2007-01-08 18:42:18 Yeni PostgreSQL sürümleri duyuruldu.