Herkese merhabalar, bu yazımızda sizlere SQLite programında sql sorgularında Türkçe karakter sorunu çözümü nasıl yapılır onu anlatacağız.
SQLite programında SQL sorguları yaparken özellikle order by sorgu sıralaması işlemlerinde bazen Türkçe karakter sorunu yaşayabiliyoruz. Mesela İ, Ç, Ü vb. gibi Türkçe karakter harfleri sql sıralama sorgularında sonuncu harf olarak algılıyor. Mesela İ harfi order by sorgusunda Z harfinden sonra yazılıyor. Fakat normalde Türkçe karakter sorunu olmasa Z’den önce yazılması gerekir. Ama bu tarz büyük küçük Ç harfi, büyük İ harfi, büyük küçük Ü harfi, büyük küçük Ö harfi vb. gibi harflerde sıralama (Order by DESC veya Order by ASC) sorunları olabiliyor. Şimdi sizlere bu sorun nasıl çözülebilir onu gösterelim.
SQLite Sorgularında Türkçe Karakter Sorunu Çözümü Nasıl Yapılır?
Öncelikle hatanın örnek görüntüsünü sizlere iletelim.

Mesela yukarıdaki görselde gördüğünüz gibi biz “ogrenciadi” bölümünü a’dan z’ye göre sıraladık. Fakat burada gördüğünüz gibi Z harfinden sonra İ ile başlayan isim listelendi. Halbuki en sonda Zeynep ve Züleyha olması lazım. Ama Türkçe karakter hatasından dolayı büyük İ harfini SQL algılamadığı için Z harfinden sonraya atmış oldu. Bunun aslında SQLite programında doğrudan bir çözümü yok. Fakat 2 farklı yöntemle bu hatayı giderebilirsiniz.
1. Çözüm Yöntemi:
Öncelikle ilk yöntem olarak SQLite programında “Collate” yani “Karşılaştırma” kısmını ayarlamamız gerekiyor. Bazı bilgisayarlarda bu collate kısmını “UTF8CI” veya “UTF8” yaparsanız Türkçe karakter sorgulama sorunu çözülmüş olur. Öncelikle SQLite programında tablolar kısmına gelip hangi tablo üzerinde sıralama yapacaksak ona sağ tık yapıp “Tabloyu Düzenle” diyoruz.

Sonrasında sağ tarafta “Karşılaştırma” ekranı çıkacak. Aslında burası İngilizcesi “Collate” olarak geçiyor.

Oraya tıkladığınızda aşağıda UTF 8, UTF 8CI vb. değerlerin çıkması gerekiyor. Bazı bilgisayarlarda bu otomatik gözükür ama bazılarında gözükmez. Eğer sizde UTF8 gözükmüyorsa bu durumda SQL sorgulama kodlarından sıralama yapabiliriz.

Execute SQL bölümüne gelip sorgu kodlarına sıralama yapacağımız satıra “order by ogrenciadi collate UTF8CI” yazın.

Ardından sorguyu çalıştırın. Aşağıdaki gibi bir hata alacaksınız. Buna “Yes” deyin.

Sonrasında tekrar sorguyu çalıştırma butonuna basarsanız hata almadığınızı göreceksiniz. Bu şekilde sorgu sıralamasını değiştirebilirsiniz.

Fakat yine aynı Türkçe karakter hatası alabilirsiniz. Çünkü bizde bizzat bu şekilde oldu. Yani sıralamadaki “İbrahim” isminin yeri değişti ama yine doğru yerde çıkmadı. En doğru sonucu almak için 2. yönteme başvurmanız daha iyi olacaktır. Şimdi ikinci yöntemi anlatalım.
2. Çözüm Yöntemi:
Şimdi gelelim en kesin ve doğru çözüme. Arkadaşlar SQLite maalesef Türkçe karakter sorgularında hata verebiliyor, Türkçe harflere tam destek sağlamıyor diyebiliriz. Bu yüzden sorgu sırasında mesela İ harfini i olarak algılatacağız, Ç’yi c olarak, Ü’yü u olarak. Yani en doğrusu bu şekilde yapılabilir. Hemen gösterelim.

Yukarıdaki sorgu ekranında gördüğünüz gibi “İbrahim” ismi bu sefer sıralamada doğru yere yazılmış oldu. Çünkü sorgulamada İ harfini i’ye dönüştürdük. Haliyle sql programımız büyük İ harfini küçük i olarak yani normal İngilizce karakter olarak algıladı. Haliyle doğru sıralamayı vermiş oldu.
Harf dönüştürme SQL sorgu kodları şu şekilde:
|
1 2 3 4 5 |
order by REPLACE( REPLACE( LOWER (ogrenciadi), 'Ç', 'c'), 'İ','i'); |
Dilerseniz dönüştürmek için harf sayısını arttırabilirsiniz. Şöyle ki:
|
1 2 3 4 5 6 7 8 9 10 11 |
order by REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( LOWER (ogrenciadi), 'Ç', 'c'), 'İ','i'), 'Ü','u'), 'Ö','o'), 'Ş','s'); |
Bu şekilde Türkçe karakter sorununu karmaşık olsa da çözmüş olursunuz. “ogrenciadi” yerine kendiniz neyin sıralamasını yapacaksanız onun adını yazın. Buraya tablo adı yazılmıyor. Hangi değerlerin (sütun) order by desc veya order by asc sıralamasını yapacaksanız onun ismini yazmanız gerekiyor.
Bu şekilde SQLite Türkçe karakter problemlerini çözebilirsiniz. Normalde bazı kullanıcılar 1. yöntemle sorunu çözdüklerini belirtiyor fakat SQLite programı için en kesin çözüm 2. yöntemdir diyebiliriz. Çünkü SQLite maalesef Türkçe karakteri tam olarak desteklemiyor. Bu yüzden 2. yöntem daha kesin çalışıyor demek doğru olur. İyi çalışmalar dileriz…
Bu Yazıya Tepkin Ne Oldu ?



