26 Nisan 2009 Pazar

Mysql 'de Türkçe Karakterler ve Çoklu Dil Desteği

Merhaba Arkadaşlar,
Bu yazımda Mysql de Türkçe ve çoklu dil desteği için ne yapmamız gerektiği üzerinde duracağım. Internetteki araştırmalarımda gördüğüm bir çok insan bu sorunla uğraşıyor.Bende bu konudaki tecrübelerimi paylaşmak istedim.
Bu yazıyı kimler okumalı;
1-Sayfada görüntülemede Türkçe karakter sorunu yaşayanlar
2-Sayfada Türkçe karakter sorunu yaşamıyorum fakat sıralamam Türkçeye göre olmuyor ya da Türkçe karakterlerde sorgularımda küçük-büyük harf ayrımı oluyor diyenler.

Sistemi yeni bir veritabanı üzerine oluşturduğumuzu varsayarak yapacaklarımıza başlıyoruz.
1-Çoklu dil desteği için yapmamız gereken ilk şey veritabanını ve tabloları UTF-8 olarak oluşturmakdır.Varsayılan olarak da Türkçe dili kullanacağımız için Collation olarakda utf8_turkish_ci yi seçmeliyiz. Burdaki _ci nın anlamı "case insensitive" yani küçük büyük harf ayrımı yapma... Diğer bir değişle LIKE alan '%ALİ%' olanlarıda getir '%ali% olanları da getir.Şunu unutmayalımki kolon bazında collation ya da sorgu cümlelerimizde collation belirleyebiliyoruz. Collation nedir peki? Aslında bunu şu şekilde özetleyebiliriz. UTF-8 evrensel bir karakter seti tanımı olduğu için yani rusçdan çinceye, türkçeye, arapçaya kadar tüm dilleri destekleyen bir karakter seti olduğundan dolayı biz collation vererek aslında işlemlerimizi türkçe alfabesine göre yapılmasını sağlıyoruz.Siz collationu tablonuzda ya da alan tanımında varsayılan türkçe verdiğinizde fazladan birşey yapmanıza gerek yok aslında... Ama diyelimli rusça yazacağınız bir alan var ise onun collationunu rusçaya göre vermelisinizki o alan üzerinde bir sıralama, arama vs yaptığınızda rusça baz alınsın.
2-Yapmamız gereken ikinci şey ise php 'de mysql bağlantısını kurduktan hemen sonra
şu satırları eklemek.
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_turkish_ci'");
3-Ürettiğimiz htmlin headerına utf-8 eklemeyi unutmuyoruz.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
4-Diğer önemli bir nokta ise php dosyasını kaydederken utf-8 formatında kaydetmek. Yoksa html içine yazdığınız sabit metinler abuk subuk şekilde görünebilir.Utf-8 olarak nasıl kaydedebileceğiniz konusunda kullandığınız editörün özelliklerine bakınız.Örneğin notepadda farklı kaydet, kodlama kısmından utf-8 seçerek utf-8 formatında kaydedebilirsiniz.Basit ve kullanışlı bir editör olarak notepad++ i önerebilirim. Yada daha gelişmiş bir editör isterseniz Eclipse de kullanabilirsiniz.
Yapmamız gereken tüm işlemler bundan ibaret... Artık Türkçede dahil olmak üzere tüm dilleri kapsayan bir yapıya kavuşmuş oldunuz.