PHP+MySQL tabanlı web sitesi kodlamasına yeni başlayan arkadaşlar yeni sürüm MySQL veritabanı üzerinde Türkçe karakter problemleri ile karşılaşmaktalar. MySQL 4 ve üzeri sürümler karakter setlerini desteklediğinden ötürü, ya evrensel ya da Türkçe kodlama seti kullanmalısınız.
Bahsettiğim gibi yeni sürüm MySQL veritabanları üzerinde karakter setleri yer alır. Her bir dil için özel karakter setleri yer aldığı gibi, tüm dillerin karakterlerini destekleyen evrensel setler de yer alır. Projelerinizde mysql türkçe karakter sorunu ile karşılaşmamak için öncelikle sitenizin yayın diline karar vermelisiniz. Yani siteniz üzerinde sadece Türkçe yayın mı yapacaksınız, yoksa evrensel karakterler de kullanacak mısınız? Verdiğiniz karara göre MySQL veritabanı karakter setini seçmeniz gerekmektedir.
Eğer sadece Türkçe karakter destekli yayın yapacaksanız, veritabanın karakter kodlaması latin5_turkish_ci olmalıdır. Türkçe diline ait karakter kodlaması budur, ve bunu kullandığınız süre boyunca veritabanınızda mysql türkçe karakter hatası yaşamazsınız.
Yeni bir veritabanı oluşturduğunuzda, Karşılaştırma(Collation) değerinin latin1_general_ci ya da latin1_swedish_ci v.b. olduğunu göreceksiniz. Siz de bu veritabanı üstüne tablolarınızı oluşturur ve kullanıma hazır hale getirirsiniz. Fakat her tablo için varsayılan karşılaştırma değeri, yine veritabanında kullanılan değer ile aynı olacaktır. Yani
latin1_swedish_ci
Aslında karşılaştırma değeri tabloların dil kodlamasıdır. Ve sadece metin içerikli sütunlarda görünmektedir. Bunun anlamı, o sütunda seçmiş olduğunuz dilin kullanılacağıdır diyebilirim. Standart olarak swedish geçer. Sizlerin bu sütunlara yollayacağınız kayıtlar ise, İsveççe dili göz önünde bulundurularak girilir. Bundan da şu çıkar: İsveççede Türkçe karakter yer almaz, bu yüzden Türkçe karakterler yerine ? v.b. gibi karakter bulacaksınız. Sanırım genel olarak anlatabildim bu kısmı.
Yeni bir veritabanı oluştururken, karşılaştırma değerini daima latin5_turkish_ci seçin. Dilimize ait karakter kodu budur. Bu şekilde veritabanını oluşturursanız, tablolar için yapmanız gereken fazladan bir şey yok. Tablo oluştururken, metin değerli sütunların karşılaştırma değerlerini boş bırakabilir ya da yine latin5_turkish_ci seçebilirsiniz.
Sıra php kodlarınızı yazmaya geldiğinde, tabi ki tablonuzun karşılaştırma değerini SQL dilinde belirtmelisiniz. Bunun için aşağıda vereceğim kodu kullanacaksınız. Bunu veritabanı bağlantısı kurup, ilgili veritabanını seçtiğiniz satırın bir alt satırına girebilirsiniz.
mysql_query("SET NAMES 'latin5'");
Bu kodumuz tüm sorgularda karşılaştırma değerinin latin5 olacağını söyler. Böylelikte gireceğiniz Türkçe karakterler sorunsuz şekilde tablolara yazılacaktır.
Sanırım anladık
Bu şekilde yayın yapacağınız web sitesinin HTML karakter kodu ise elbette iso-8859-9 olmalıdır
Yani;
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
Mysql 4 üstünde Türkçe karakter hatasını bu şekilde çözebilirsiniz. Ayrıca bu çözümü, hazır içerik yönetim kodlamaları üstüne de uygulayabilirsiniz. Tek mantık burasıdır
Eğer birden fazla dil destekli bir web sitesi kuracaksanız, kullanmanız gereken karakter kodu UTF-8 olmalıdır.
Yeni bir veritabanı oluştururken utf8_general_ci karakter setini seçmelisiniz. PHP ile bu veritabanına bağlanırken,
mysql_query("SET NAMES 'utf8'");
sorgusu ile UTF8 karakter seti kullandığınızı tanımlamalısınız. Ve son olarak HTML karakter setiniz de UTF8 olmalıdır.
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Yer gelmişken MYSQL 5 ve PHP’ylen yaşadığmız bir sorun ve basit çözümünü yazmak isityorum, MYSQL 5′i sihirbazla Windows’a hızlıca kurduysanız, daha önceden çalışan kodlarınızın hata vererek çalışmayı reddettiğini görebilirsiniz.
Bunun nedeni kurulum ekranlarından birinde “strict mode” seçeneğinin işaretli olması, bu “katı ve kuralcı mode” seçeneği yüzünden mesela veritabanındaki bir tabloaya ekleme yaparken bir sütunu boş geçemiyorsunuz. İlla tanımlayacan.
Php’nin notice errorlarının açık olması gibi düşünün, ama kötüsü ekleme işlemini yapmıyor!
Düzeltmek için başlat->Programlar->Mysql 5′den tekrar kurulum sihirbazını çalıştırın ve “strict mode” seçeneğini seçisiz hale getirin…
Yücel Bey, mysql 5′i henüz kullanmış değilim. Ve asp ile de ilgili pek bilgim yok. O yüzden sorunuza yanıt olamayacağım.
Bende olmuyor. Sanırım bu MySQL bana gıcık
Merhaba ben MYsql 5 serisini kullanıyorum serverımda ve asp dili ile yazıyorum ve türkçe karakter desteğini yapamıyorum ve ne yapmam gerekiyor bu konuda yardım ederseniz devinirim
Çok teşekkürler Cüneyt
Merhaba(15.nolu yorumumdaki problemi çözdüm.)
Arkadaşlar Php_Nuke’le beraber entegre gelen Phpbb yi türkçeleştimenin yolu db\db.php dosyasında gerekli eklentiyi yapmak.Admin panelinden girdikten sonra bütün karekterlerin tüekçe olarak geldiğini ve sizin yapmış olduğunuz değişikliklerin veritabanına türkçe olarak yazıldığını phpmyadmin yardımıyla farkedebilirsiniz.
$db = new sql_db($dbhost, $dbuname, $dbpass, $dbname, false);
mysql_query(”SET NAMES ‘latin5′”);
Kolay Gelsin..
Oscommerce içinde düzelttim aşkadaşlar aklınızda bulunsun yapmanız gereken includes\application_top.php de ve aynı dosyanın admin dizinindeki haline gerekli satırı eklemek
tep_db_connect() or die(’Unable to connect to database.!’);
tep_db_query(”SET NAMES ‘latin5′”);
hiçbir problem kalmıyor..Fakat bu seferde phpbb’nin admin panel bölümüyle başım dertte Php_nuke administation dan Forum yönetimine girince admin panelindeki karaktereler sapıtık geliyor halbuki database de türkçeler düzeltmeye uğraşayım bilgisi olan varsa yardım ederse sevinirim..
Kolay Gelsin
3.2 sürümlerinde karşılaştırma ve karakter kodlama özelliği yok sanırım. O yüzden onlarda Türkçe karakter problemi olmuyor. Bu nedenle çözüm yolu kullandığınız site yazılımını incelemenizde olabilir
peki mysql in 3.2 versiyonları için türkçe karakter problemini gidermeye ilişkin çözüm önerisi ? bilgisi olan var mıdır ? çünkü set names olayı 3.2 versiyonunda malasef işlemiyor.
Sanırım aynı adımları yapmak yada uygulamak gerecektir oscommerce için de sayın cuneyt. Oscommerce hiç kullanmadığımdan ötürü ne dersem yalan olur. Fakat phpnuke, IPB, Wordpress gibi yazılımlarda bu yöntemin elle uygulanması gerektiği gördüm. O yüzden Oscommerce de gerektirebilir sanırım