Arkadaşlar Fibplus bileşenleri ile veritabanına bağlanıyorum.
Veritabanı Friebird. Ibexpert ile hazırladım.
Charset Iso8859_1 ayarladığımda veritabanına bağlanabiliyorum ama arama yaparken türkçe karakter sorunu yaşanıyor.
Cahrset türkçe(1254) yaptığımda ise hata veriyor ve hiç bir sonuç elde edemiyorum.
Bu sorunu nasıl çözebilirim.
Teşekkürler.
Fibplus Türkçe Karakter Sorunu
Re: Fibplus Türkçe Karakter Sorunu
charset olarak 'WIN1254 seçmen gerekiyor.
Örnek kod:
Örnek kod:
Kod: Tümünü seç
Function TTables.BaglanFIBDB(DataBaseName: string):Boolean;
begin
with FIBDB do
begin
if Connected then Connected := False;
DBName :=DataBaseName;
ConnectParams.UserName :='SYSDBA';
ConnectParams.Password :='masterkey';
ConnectParams.CharSet :='WIN1254';
SQLDialect :=3;
try
Connected:=True;
except on e : Exception do
Begin
//Raise Exception.Create
Showmessage
('Veritabanına bağlanılamadı'+#13#10+'Hata:'+#9 + e.Message);
End; // except on e:Exception do
end; //try Connected :=True;
result := Connected;
end; //With fibdb do
end;
-
- Üye
- Mesajlar: 135
- Kayıt: 14 Kas 2005 12:24
Re: Fibplus Türkçe Karakter Sorunu
Dediğinizi yaptım. Ama büyük küçük harf sorunu hala devam ediyor. Veritabanını başka bir projede denedim yine aynı sorunla karşılaştım.Lost Soul yazdı:charset olarak 'WIN1254 seçmen gerekiyor.
Şimdilik aşağıdaki sekilde kullanıyorum. Sorguda İ kullanınca sonuç vermiyor. Diğer hallerde çalışıyor.
Kod: Tümünü seç
SelectSQL.Add(' AND UPPER(ADI) LIKE UPPER(''%'+cxTEdtadi.Text+'%'')');
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
Re: Fibplus Türkçe Karakter Sorunu
http://delphiturkiye.com/forum/viewtopi ... e+pxw_turk
bu ifadenin karakter seti belli degil , bununda karakter setini fb ye bildirmeniz lazim.
Kod: Tümünü seç
LIKE UPPER(''%'+cxTEdtadi.Text+'%'')')
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
Re: Fibplus Türkçe Karakter Sorunu
arama yaparken
... 'WHERE UPPER(ADI collate pxw_turk) Like ''%'+ansiuppercase(cxTEdtadi.Text)+'%'' şeklinde kulanın
... 'WHERE UPPER(ADI collate pxw_turk) Like ''%'+ansiuppercase(cxTEdtadi.Text)+'%'' şeklinde kulanın
-
- Üye
- Mesajlar: 5
- Kayıt: 26 May 2018 10:09
Re: Fibplus Türkçe Karakter Sorunu
Firebird 3.0 Kullanıyorum.
Türkçe karakter ve arama sorunu yaşayanlar için güncelleme yapmak istiyorum. Veri tabanınızı oluştururken UTF8 olarak oluşturursanız türkçe sıralama hatalarından kurtulursunuz.
Veri tabanı tabloları oluştururken varchar(x) COLLATE UNICODE_CI şeklinde oluşturmanız büyük küçük harf duyarsız ve unicode karakterler içeren string alanlar oluşturabilmeyi sağlar.
Arama yaparken,
select * from KARSILASTIRMA where REPLACE(BUYUKHARF, 'İ', 'I') like REPLACE('%i%','İ','I') Order By BUYUKHARF
şeklinde arama yapmanız içerisinde büyük İ harfi olan verilerin doğru gelmesini sağlar. aşağıda bunu açıklıyorum.
Sıralamada Problemimiz yok çünkü kodlama UTF8 ve COLLATE UNICODE_CI olduğunda Türkçe sıralama doğru çalışıyor.
* UPPER ile yapılan çözümler işe yaramıyor çünkü;
küçük "ı" karakteri "I" karakterine ve küçük "i" karakteri yine "I" karakterine çevriliyor.
Çevrimler her ne kadar mantıklı görünse de, kimse ismail'e ısmail demez.
veri tabanında da Büyük - küçük İ ve I farklı karakterler ve ismail ile İsmail aynı şey olmasına karşın,
ismail ile Ismail farklıdır.
* Son Kullanıcıya İsmaile Ismail gir demek mantıksız çünkü biri büyük giriyor öteki küçük arıyor buna karışma hakkımız yok.
* Programatik olarak Büyük İ girişleri i olarak değiştirmek ve veri tabanına küçük i olarak girmek mantıksız. Çünkü bunları aratmanın dışında raporlama yapıyorsanız tüm raporlarla oynamak gerekiyor.
* Aşağıda bir test tablosu oluşturdum.
/* Test Tablosu */
CREATE TABLE KARSILASTIRMA (
KARSILASTIRMAID INTEGER NOT NULL
,BUYUKHARF VARCHAR(50) COLLATE UNICODE_CI
,KUCUKHARF VARCHAR(50) COLLATE UNICODE_CI
,KULLANIMDA BOOLEAN default TRUE
,CONSTRAINT PK_KARSILASTIRMA PRIMARY KEY (KARSILASTIRMAID)
);
/* Test Datası */
INSERT INTO KARSILASTIRMA VALUES (1,'ALPER','alper',True);
INSERT INTO KARSILASTIRMA VALUES (2,'BARIŞ','barış',True);
INSERT INTO KARSILASTIRMA VALUES (3,'CÜNEYT','cüneyt',True);
INSERT INTO KARSILASTIRMA VALUES (4,'ÇİÇEK','çiçek',True);
INSERT INTO KARSILASTIRMA VALUES (5,'DENİZ','deniz',True);
INSERT INTO KARSILASTIRMA VALUES (6,'EMİNE','emine',True);
INSERT INTO KARSILASTIRMA VALUES (7,'FATMA','fatma',True);
INSERT INTO KARSILASTIRMA VALUES (8,'GAMZE','gamze',True);
INSERT INTO KARSILASTIRMA VALUES (9,'ĞİLEYOK','ğileyok',True);
INSERT INTO KARSILASTIRMA VALUES (10,'HAYDAR','haydar',True);
INSERT INTO KARSILASTIRMA VALUES (11,'IĞDIR','ığdır',True);
INSERT INTO KARSILASTIRMA VALUES (12,'İSMAİL','ismail',True);
INSERT INTO KARSILASTIRMA VALUES (13,'JALE','jale',True);
INSERT INTO KARSILASTIRMA VALUES (14,'KEMAL','kemal',True);
INSERT INTO KARSILASTIRMA VALUES (15,'LEYLA','leyla',True);
INSERT INTO KARSILASTIRMA VALUES (16,'MAHMUT','mahmut',True);
INSERT INTO KARSILASTIRMA VALUES (17,'NAMIK','namık',True);
INSERT INTO KARSILASTIRMA VALUES (18,'OSMAN','osman',True);
INSERT INTO KARSILASTIRMA VALUES (19,'ÖZKAN','özkan',True);
INSERT INTO KARSILASTIRMA VALUES (20,'PINAR','pınar',True);
INSERT INTO KARSILASTIRMA VALUES (21,'RAMİS','ramis',True);
INSERT INTO KARSILASTIRMA VALUES (22,'SERKAN','serkan',True);
INSERT INTO KARSILASTIRMA VALUES (23,'ŞEYDA','şeyda',True);
INSERT INTO KARSILASTIRMA VALUES (24,'TARIK','tarık',True);
INSERT INTO KARSILASTIRMA VALUES (25,'UFUK','ufuk',True);
INSERT INTO KARSILASTIRMA VALUES (26,'ÜZEYİR','üzeyir',True);
INSERT INTO KARSILASTIRMA VALUES (27,'VEDAT','vedat',True);
INSERT INTO KARSILASTIRMA VALUES (28,'YALÇIN','yalçın',True);
INSERT INTO KARSILASTIRMA VALUES (29,'ZAFER','zafer',True);
-- sınama
select * from KARSILASTIRMA
select * from KARSILASTIRMA ORDER By BUYUKHARF
select * from KARSILASTIRMA ORDER By KUCUKHARF
select * from KARSILASTIRMA where BUYUKHARF like '%i%' -- İSMAİL İsmi gelmiyor içerisinde Büyük İ karakteri olan isimlerin hiçbiri yok
select * from KARSILASTIRMA where UPPER(BUYUKHARF) like UPPER('%i%') -- Küçük "i" Harfi Büyük "I" harfine dönüştürülüyor. Eksik Sonuç Dönüyor
-- UPPER fonksiyonlu hiç bir sonucu doğru alamadım
select * from KARSILASTIRMA where BUYUKHARF CONTAINING 'İ' -- İşe yaramıyor
select * from KARSILASTIRMA where BUYUKHARF collate UTF8 Like '%İ%' -- İşe yaramıyor
-- En yakın bulduğum çözüm (aslında tek çözüm)
select * from KARSILASTIRMA where REPLACE(BUYUKHARF, 'İ', 'I') like REPLACE('%i%','İ','I') Order By BUYUKHARF
Saygılar.
Türkçe karakter ve arama sorunu yaşayanlar için güncelleme yapmak istiyorum. Veri tabanınızı oluştururken UTF8 olarak oluşturursanız türkçe sıralama hatalarından kurtulursunuz.
Veri tabanı tabloları oluştururken varchar(x) COLLATE UNICODE_CI şeklinde oluşturmanız büyük küçük harf duyarsız ve unicode karakterler içeren string alanlar oluşturabilmeyi sağlar.
Arama yaparken,
select * from KARSILASTIRMA where REPLACE(BUYUKHARF, 'İ', 'I') like REPLACE('%i%','İ','I') Order By BUYUKHARF
şeklinde arama yapmanız içerisinde büyük İ harfi olan verilerin doğru gelmesini sağlar. aşağıda bunu açıklıyorum.
Sıralamada Problemimiz yok çünkü kodlama UTF8 ve COLLATE UNICODE_CI olduğunda Türkçe sıralama doğru çalışıyor.
* UPPER ile yapılan çözümler işe yaramıyor çünkü;
küçük "ı" karakteri "I" karakterine ve küçük "i" karakteri yine "I" karakterine çevriliyor.
Çevrimler her ne kadar mantıklı görünse de, kimse ismail'e ısmail demez.
veri tabanında da Büyük - küçük İ ve I farklı karakterler ve ismail ile İsmail aynı şey olmasına karşın,
ismail ile Ismail farklıdır.
* Son Kullanıcıya İsmaile Ismail gir demek mantıksız çünkü biri büyük giriyor öteki küçük arıyor buna karışma hakkımız yok.
* Programatik olarak Büyük İ girişleri i olarak değiştirmek ve veri tabanına küçük i olarak girmek mantıksız. Çünkü bunları aratmanın dışında raporlama yapıyorsanız tüm raporlarla oynamak gerekiyor.
* Aşağıda bir test tablosu oluşturdum.
/* Test Tablosu */
CREATE TABLE KARSILASTIRMA (
KARSILASTIRMAID INTEGER NOT NULL
,BUYUKHARF VARCHAR(50) COLLATE UNICODE_CI
,KUCUKHARF VARCHAR(50) COLLATE UNICODE_CI
,KULLANIMDA BOOLEAN default TRUE
,CONSTRAINT PK_KARSILASTIRMA PRIMARY KEY (KARSILASTIRMAID)
);
/* Test Datası */
INSERT INTO KARSILASTIRMA VALUES (1,'ALPER','alper',True);
INSERT INTO KARSILASTIRMA VALUES (2,'BARIŞ','barış',True);
INSERT INTO KARSILASTIRMA VALUES (3,'CÜNEYT','cüneyt',True);
INSERT INTO KARSILASTIRMA VALUES (4,'ÇİÇEK','çiçek',True);
INSERT INTO KARSILASTIRMA VALUES (5,'DENİZ','deniz',True);
INSERT INTO KARSILASTIRMA VALUES (6,'EMİNE','emine',True);
INSERT INTO KARSILASTIRMA VALUES (7,'FATMA','fatma',True);
INSERT INTO KARSILASTIRMA VALUES (8,'GAMZE','gamze',True);
INSERT INTO KARSILASTIRMA VALUES (9,'ĞİLEYOK','ğileyok',True);
INSERT INTO KARSILASTIRMA VALUES (10,'HAYDAR','haydar',True);
INSERT INTO KARSILASTIRMA VALUES (11,'IĞDIR','ığdır',True);
INSERT INTO KARSILASTIRMA VALUES (12,'İSMAİL','ismail',True);
INSERT INTO KARSILASTIRMA VALUES (13,'JALE','jale',True);
INSERT INTO KARSILASTIRMA VALUES (14,'KEMAL','kemal',True);
INSERT INTO KARSILASTIRMA VALUES (15,'LEYLA','leyla',True);
INSERT INTO KARSILASTIRMA VALUES (16,'MAHMUT','mahmut',True);
INSERT INTO KARSILASTIRMA VALUES (17,'NAMIK','namık',True);
INSERT INTO KARSILASTIRMA VALUES (18,'OSMAN','osman',True);
INSERT INTO KARSILASTIRMA VALUES (19,'ÖZKAN','özkan',True);
INSERT INTO KARSILASTIRMA VALUES (20,'PINAR','pınar',True);
INSERT INTO KARSILASTIRMA VALUES (21,'RAMİS','ramis',True);
INSERT INTO KARSILASTIRMA VALUES (22,'SERKAN','serkan',True);
INSERT INTO KARSILASTIRMA VALUES (23,'ŞEYDA','şeyda',True);
INSERT INTO KARSILASTIRMA VALUES (24,'TARIK','tarık',True);
INSERT INTO KARSILASTIRMA VALUES (25,'UFUK','ufuk',True);
INSERT INTO KARSILASTIRMA VALUES (26,'ÜZEYİR','üzeyir',True);
INSERT INTO KARSILASTIRMA VALUES (27,'VEDAT','vedat',True);
INSERT INTO KARSILASTIRMA VALUES (28,'YALÇIN','yalçın',True);
INSERT INTO KARSILASTIRMA VALUES (29,'ZAFER','zafer',True);
-- sınama
select * from KARSILASTIRMA
select * from KARSILASTIRMA ORDER By BUYUKHARF
select * from KARSILASTIRMA ORDER By KUCUKHARF
select * from KARSILASTIRMA where BUYUKHARF like '%i%' -- İSMAİL İsmi gelmiyor içerisinde Büyük İ karakteri olan isimlerin hiçbiri yok
select * from KARSILASTIRMA where UPPER(BUYUKHARF) like UPPER('%i%') -- Küçük "i" Harfi Büyük "I" harfine dönüştürülüyor. Eksik Sonuç Dönüyor
-- UPPER fonksiyonlu hiç bir sonucu doğru alamadım
select * from KARSILASTIRMA where BUYUKHARF CONTAINING 'İ' -- İşe yaramıyor
select * from KARSILASTIRMA where BUYUKHARF collate UTF8 Like '%İ%' -- İşe yaramıyor
-- En yakın bulduğum çözüm (aslında tek çözüm)
select * from KARSILASTIRMA where REPLACE(BUYUKHARF, 'İ', 'I') like REPLACE('%i%','İ','I') Order By BUYUKHARF
Saygılar.