Php+mysql tabanlı site tasarımları hazırlayan yeni arkadaşların en büyük problemleridir, mysql 4 üzerindeki karakter problemleri. Aslında göründüğü kadar zor birşeyde değildir düzeltmesi. Hem phpnuke hem wordpress kurarken olsun, karşılaştığım en büyük problemdi bu. Bu sadece mysql 4 üzerinde oluşan birşey. Yani mysql 4′ler üstünde karakter kodlama seçenekleri söz konusu.
Yeni bir veritabanı yarattığınızda, Karşılaştırma(Collation) değerinin latin1_general_ci, latin1_swedish_ci v.b. olduğunu göreceksiniz. Siz bu veritabanı üstüne tablolarınızı yaratır 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 olacaktır.
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ğı diyebilirim. Standart olarak swedish geçer. Sizlerin bu sütunlara yollayacağınız kayıtlar ise, isveçce dili göz önünde bulundurularak girilir. Bundan da şu çıkar: isveçcede Türkçe karakter yer almaz, bu yüzden Türkçe karakterler yerine ? v.b. karakter bulacaksınız. Sanırım genel olarak anlatabildim bu kısmı.
Yeni bir veritabanı yaratırken, karşılaştırma değerini daima latin5_turkish_ci seçin. Dilimize ait karakter kodu budur. Bu şekilde veritabanını yaratırsanız, tablolar için yapmanız gereken fazladan birşey yok. Tablo yaratırken, metin değerli sütunların karşılaştırma değerlerini boş bırakabilir yada 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ırana 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.
Mysql 4 üstünde Türkçe karakter hatasını bu şekilde çözebilirsiniz. Ayrıca benzeri uygumalayı, hazır içerik yönetim kodlamaları üstüne de uygulayabilirsiniz. Tek mantık burasıdır
Bu yazı 25 Ekim 2005, 08:32 tarihinde yazılmış olup bu zamana kadar 40,490 kez görüntülenmiştir
En son ise 28 Eylül 2008, 16:22 tarihinde güncellenmiştir
Bu yazı 197 adet yorum almıştır ve bunların son 10 adeti görüntülenmektedir. Bu yazıya yapılan tüm yorumları görmek için arşivi görüntüleyiniz. TÜM YORUMLARI OKUMAK İÇİN TIKLAYINIZ.
uygulama tarafı için connection string içine
stmt=SET NAMES ‘Latin5′
eklerseniz bu iş olur
örnek
——————–
“DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;UID=root;PASSWORD=123456;OPTION=3;stmt=SET NAMES ‘Latin5′”
tablolardan birisini utf-8turkish ci yaptım türkçe karakteri destekleddi
ama diğer tablolarıma yaptığımda nedense türkçe karakteri desteklemiyor ![]()
Sorununa Yanıt Bulamayan Arkadaşlar Phpmyadminde Elle Girerseniz Veri Çekerken Türkçe Karaterlerin Bozuk Çıkması Doğal Eğer Veri leri Web Arabirimi Kullanarak Veri tabanına İşlerseniz Bu sorun Ortadan Kalkıcaktır..Çünkü Web ara birimi Kullanırken Türkçe karakleri Dönüştürürek Kayıt Yapıyor…Ve Çekerkende Türkçe Karateri Orjinali olarak Gönderiyor…Veya Veri tabanına PhpMyadmin giricekseniz Türkçe Karaterlerin Karşılığını yazmalısınız..
Büyük İhtimal Sorununa Yanıt Bulamayanların Cevabı Budur…
Güzel ve açıklayıcı olmuş, teşekkürler.
Her zaman sorun yaşamazdım ama karşılaştırma değerini latin5_turkish_ci yapıp
ve mysql_query("SET NAMES ‘latin5′"); sorgusunu çalıştırınca bozukluk oluyor.
mesela ğ harfi, sayfada görünürken ð şeklinde, sayfanın html kaynak koduna baktığımda ise ð gözüküyor.Mesele nedir sizce?
Yardımcı olursanız sevinirim.
@Ahmet Alp Balkan ; Haklısın Ahmet, UTF8 evrensel bir karakter kodu ve tüm karakterleri destekliyor. Bence de özel olarak kodlanacak tüm projelerde UTF8 kullanılmalı ![]()
Geç gelen bir yorum olacak ama aslında php kodlarınızda ve html dosyalarınızda düzgün bir şekilde UTF-8 kullanıp çalıştırabilirseniz, verilerinizi düzgün bir şekilde saklayabilirseniz utf8_general_ci kullanabilirsiniz. Örneğin ben mySchoolog’da (www.myschoolog.com) her türlü milletin kendi dilinde yazdığı şeyleri saklayıp okuyabilmelerini sağlıyorum. Aslında burda Hakan bey’in UTF8′i tanıtıcı bir yazı yazması gerek bence ![]()
Bu sayfada verilen bilgiler ile Türkçe karakter problemini şöyle çözdüm:
1) head kısmına
2) veritabanımda tum tablolar utf8_turkish_ci
ve
3) PHP kodunun içine veritabanı seçme kısmından sonra ise
mysql_query("SET NAMES ‘utf8′");
bu 3 adımdan herhangi biri eksik olunca çalışmıyor. en azından benim sitemde böyle oldu
Çok teşekkür ederim. Herkese kolay gelsin.
Teşekkürler arkadaşım gerçekten sizin gibi insanların bu tarz konularda makale yazmaları çok iyi oluyor bu problemi yaşıyordum ve ben ilk kurulumda latin5 seçilmesi gerektiği konusunda bir takım bilgilerim vardı fakat ilk serv kurulumunda da latin5 diye kurduğumu hatırlıyordum ne yapacağım ne edeceğim derken makalen ile karşılaştım ve sorunum çözüldü çok teşekkürler. Bende yavaş yavaş php ye başladım bakalım sonumuz hayrola :). Tekrar teşekkür ediyorum iyi çalışmalar dilerim.
acil yardım!!!
sayfada anlatılan şekilde yaptım herşeyi. yeni database yarattım latin5_turkish_ci karşılaştırma degeriyle. tablonun ve icindeki sutunlari bile latin5_turkish_ci yaptım. kayıt eklemeye calistigimda ş,ı,ğ harflerini ? olarak kaydediyor. sunun tam bi dogrusu yok mudur? ![]()
Yazını çok beğendim. Yeni yazılarının e-posta adresime gelmesini istiyorum :)