MySQL 4.1′den itibaren türkçe karakter işi karıştı. “SET NAMES latin5″ ile çözdük bu problemi gerçi ama yine de sistemin nasıl çalıştığını bilmezseniz sorun yaşayabilirsiniz. O yüzden MySQL’in karakter seti ve collation hakkında birşeyler yazayım istedim.
Tanımlar
Konuyu kavramak için önce tanımları ele alalım. Bilmemiz gereken iki tanım var: “Character Set” ve “Collation”
Character Set (Karakter Seti)
Adından anlayabileceğiniz gibi desteklenen karakterleri kast ediyoruz. Örneğin latin5 karakter setindeki “ı” harfinin ASCII kodu latin1 karakter setindeki ý harfi ile aynıdır. Dolayısıyla türkçe bir dokümanı latin1 olarak gösterirseniz tüm ‘ı’ harfleri ‘ý’ olarak gösterilecektir.
Farklı diller aynı karakter setlerine sahip olabilir, örneğin latin1 seti almanca, ispanyolca, ingilizce, isveçce gibi dilleri kapsar.
Notlar:
- Character set, charset, code page gibi isimleri de vardır.
- latin1: ISO-8859-1 ve windows-1252 ile aynıdır.
- latin5: ISO-8859-9 ve windows-1254 ile aynıdır.
Collation (koleyşın)
İki karakterin karşılaştırılmasında kullanılır. Pratikte bu tablo alanlarını sorgularken ve sıralamalarda işe yarar:
SET names latin5; SELECT * FROM deneme WHERE isim = 'Çağrı'; SELECT * FROM deneme ORDER BY isim;
Yukarıdaki sorguların sonucu isim alanının collation’ına bağlıdır.
Örnekle açıklamak istersek, almancada da “ü” harfi var türkçede de, isveçcede de… Ama bu harflerin alfabedeki yeri dile göre değişiyor yani collation’ı latin1_swedish_ci seçip sıralama yaparsanız ü başka yerde, latin1_german1_ci seçerseniz başka yerde yer alır. Ya da latin1_german1_ci seçerseniz aramalarda ‘ä’ ile ‘a’ aynı kabul edilirken latin1_german2_ci seçerseniz farklı kabul edilir.
Collation altçizgiyle ( _ işareti) parçalara ayırırsak ilk kısım karakterin ait olduğu dil ailesini, ikinci kısım dili, üçüncü kısım ise karşılaştırma şeklini ifade eder.
Örneğin latin1_swedish_ci dediğimiz zaman “latin1″ ailesinden “isveçce” dilini büyük-küçük harf ayrımı olmadan sırala demek istiyoruz.
ci: Case-Insensitive (Büyük – küçük harfe duyarsız)
cs: Case-Sensitive (Büyük – küçük harfe duyarlı. Sadece bazı diller için geçerli, türkçede kullanılmaz)
bin: Binary (Karakteri tanımlayan byte değerine göre karşılaştır demek. Pratikte büyük – küçük harfe duyarlılık istendiğinde kullanılır.
MySQL Dil Ayarı Nasıl Yapılır?
MySQL’le biraz uğraşırsanız dilin ayarlanabileceği tonla yer görürsünüz. Büyükten küçüğe doğru gidersek:
- Sunucu ayarı
- Veritabanı ayarı
- Tablo ayarı
- Tablodaki alanın ayarı
Not 1: Bu ayarlardan pratikte sizi tek ilgilendiren: tablodaki alanın karakter seti.
Not 2: Buradaki ayarlar ne olursa olsun son sözü yine bağlantıyı kurduktan sonra verdiğiniz “SET NAMES utf8″ komutu söyler.
1. MySQL Sunucusu
MySQL derlenirken tanımlanabilir:
shell> ./configure --with-charset=utf8 --with-collation=utf8_general_ci
Ya da my.cnf / my.ini’de tanımlanabilir:

Son zamanlardaki favori editörüm 
