iso-8859-9, latin1_general_ci, latin1_swedish_ci, latin5_turkish_ci, MySQL, SQL, UTF-8, utf8_general_ci

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.

216 yorum Beğen Paylaş MySQL Türkçe Karakter Problemi

MySQL Türkçe Karakter Problemi

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.

Sadece Türkçe Karakter Destekli Yayın Yapacaksanız

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ı.

MySQL Türkçe Karakter Sorunu Çözüm Yolu

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 :)

Birçok Dilde Yayın Yapacaksanız

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" />
25 Ekim 2005, 08.32 tarihinde yayınlanmış
19 Kasım 2009, 23.50 tarihinde güncellenmiş
Bu yazı 216 adet yorum almıştır ve bunların 216 ile 206 arası görüntülenmektedir. Yorumları RSS ile takip edebilirsiniz.
1 2 3 ... 22
| 14 Ocak 2010 , 15:21
#216

teş ederim.
çok işime yaradı

| 03 Ocak 2010 , 21:35
#215

Teşekkürler dostum

Mehmet
| 03 Ocak 2010 , 07:53
#214

Hızır gibi yetiştiniz tabiri caizse. UTF8 değişikliği ile halledebildim.
Çok teşekkürler.

Ahmet Ongun
| 19 Aralık 2009 , 01:35
#213

çok işe yaradı teşekkürler. :-D :-D :-D

| 24 Eylül 2009 , 12:14
#212

İşe yaradı teşekkürler :)

| 22 Eylül 2009 , 23:47
#211

Teşekkürler gerçektende işe yarayan bir kod

| 10 Eylül 2009 , 18:50
#210

Benimde basıma gelmişti.Db yi açıp tek tek düzeltmiştim karakterleri

Ercan
| 09 Eylül 2009 , 17:40
#209

Bir sunucudan diğer sunucuya taşınırken de gzip’li alırsak bir problem olmuyor :)

| 09 Eylül 2009 , 17:13
#208

bu kod için teşekkürler ayrıca başka bir çözüm daha var mysql tablo eklerken tablo altlarına bir kod giriorsun tabloları latin5_turkish_ci olarak ayarlıyor.kodu bulunca eklerim.

| 05 Ağustos 2009 , 11:21
#207

Merhaba benim bir sorum var.

Mysql veri tabanını kullanıyorum. Mysqldumper Programı ile veritabanını yedeklerken Türkçe karakterleri >?< soru işareti olarak gösteriyor. Yedeklediğim bir veritabanını normal veritabanına güncellersem tahmin ediyorum karakter problemi olacak. Nasıl yapacam bunu?
:?:

1 2 3 ... 22
© 2005 - 2010 Tüm hakları dmRy.net'e aittir.
Kullanım şartları yerine getirilmeden hiçbir şekilde kopyala-yapıştır yapılamaz, yazılar ve bilgiler kullanılamaz.
Dmry.net Vital Teknoloji tarafından desteklenmektedir
yukarı dön