Sqlite Türkçe karakter sıralama sorunu çözümü

Sqlite Türkçe karakter sıralama sorunu çözümü

Sqlite ile çalışıyorsanız Türkçe sıralama gibi konularda sıkıntı yaşayabilirsiniz.

Sqlite ile sıralama sorunu yaşayan arkadaşlar aşağıdaki izah etmeye çalıştığım adımları tekrarlayarak bu sorunu çözebilirler.

Öncelikle sorunu ortaya koyalım:

Sıralamada adı Ö, İ ve Ş ile başlayanlar listenin en sonunda yer alıyor.

Sqlite editörümüzde ilgili tablomuzu açalım. (ben Sqlite Studio  kullanıyorum)

AdSoyad alanını düzenleme penceresini açalım. (Sqlite Studio'da ilgili satıra çift tıklayarak oluyor)

ve Collate bilgisini ayarlayalım:

"Collation name" bilgisi olarak RTRIM, NOCASE, BINARY standart olarak sunulmaktadır. Ben bu alana "UTF8CI" değerini yazdım. Siz istediğiniz ismi verebilirsiniz. (Birazdan anlayacaksınız)

Bu şekilde tablomuzu güncelledikten sonra sayfamızı tekrar açtığımızda aşağıdaki gibi bir hata alacaksınız.

Son derece mantıklı olarak "UTF8CI" diye bir collation (karşılaştırma) ben bilmiyorum yazıyor :)

O zaman bunu sistemimize öğretelim:

using System.Data.SQLite;
using System.Globalization;

namespace Sqlite_Funcs
{
    [SQLiteFunction(FuncType = FunctionType.Collation, Name = "UTF8CI")]
    public class SQLiteCaseInsensitiveCollation : SQLiteFunction
    {
        public override int Compare(string x, string y)
        {
            return string.Compare(x, y, true, new CultureInfo("tr-TR"));
        }
    }
}

Bu şekilde sistemimize UTF8CI diye bir collation ile karşılaştığında ne yapması gerektiğini öğretmiş oluyoruz.

Kodu inceleyiniz. (kırmızı alanlara dikkat). Name kısmına yazdığımız değer ile az önce AdSoyad alanının collation bilgisine yazdığımız değerin aynı olduğuna dikkat ediniz!

SQLiteFunctions'tan türeyen bir class içerisine Türkçe karşılaştırma yapan basit bir C# kodu yazıyoruz.

Bu kodu bir dosya içerisine atarak App_Code altına kaydediniz.

Bir sonraki personel listesini açışınızda (kodlarını tekrardan derlendiğinde) artık karakter sıralama sorunu yaşamadığınızı göreceksiniz.

Artık isimler istediğimiz gibi sıralandı.

Herkese kolay gelsin.