DMRY.NET’e Hoşgeldiniz
Nerdeyim? GirişMySQL › MySQL Türkçe Karakter Problemi

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.

MySQL Türkçe Karakter Problemi

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

Çözüm Yolu

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 47,299 kez görüntülenmiştir
En son ise 28 Eylül 2008, 16:22 tarihinde güncellenmiştir

Bu yazı 204 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.

#204 – 24 Haziran 2009 , 08:27

ömer berke

Merhaba yazmış olduğunuz bilgiler gerçekten çok güzel. Benim çözemediğim bir problemim var.Denedim ama olmadı. Site üzerinde türkçe karakterlerle yapılan aramalarda hiç bir sonuç çıkmıyor. İngilizce yapılınca sonuçlar gözüküyor.

Örnek : magazin diye aranınca çıkıyor MAGAZİN diye aranınca çıkmıyor.
yardımcı olursanız çok sevinirim

  • Yorumlar: 1
  • İlk Yorum:
    24 Haz. 2009
#203 – 01 Haziran 2009 , 23:30

Tayfun

tesekkur ederim.

  • Yorumlar: 1
  • İlk Yorum:
    01 Haz. 2009
#202 – 23 Nisan 2009 , 16:33

Bu ufak kodla karşılaştığım sorunu çözmüş oldun. Çok teşekkürler.

  • Yorumlar: 5
  • İlk Yorum:
    16 Şub. 2009
#201 – 09 Nisan 2009 , 06:53

Bir kayıp olmaz Furkan, çünkü bütün gelişmiş portal yazılımlarında bu sorgu öncelikli olarak yapılıyor artık ;)

  • Yorumlar: 1250
  • İlk Yorum:
    16 Eki. 2005
#200 – 08 Nisan 2009 , 19:22

Merhaba, bu önemli bilgi için teşekkürler. yaşadığım sorunu sayenizde aştım. fakat bir sorum olacak. bunu kullanırsam eğer 20k tekil hitli bir sitede performans nasıl olur ? yani performans kaybı ne derece olur ?

kolay gelsin

  • Yorumlar: 1
  • İlk Yorum:
    08 Nis. 2009
#199 – 22 Kasım 2008 , 14:12

Bazen bu işe yaramayabiliyor. Böyle durumlarda htmlspecialchars fonksiyonunu kullanabilirsiniz.

<?php
$new = htmlspecialchars(”Test“, ENT_QUOTES);
echo $new; //

  • Yorumlar: 1
  • İlk Yorum:
    22 Kas. 2008
#198 – 27 Ekim 2008 , 00:55

obdberk

ahmet alp tşk :neutral:

  • Yorumlar: 1
  • İlk Yorum:
    27 Eki. 2008
#197 – 06 Ekim 2008 , 11:25

Haluk

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′”

  • Yorumlar: 1
  • İlk Yorum:
    06 Eki. 2008
#196 – 21 Temmuz 2008 , 23:20

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

  • Yorumlar: 3
  • İlk Yorum:
    18 May. 2008
#195 – 12 Temmuz 2008 , 21:39

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…

  • Yorumlar: 1
  • İlk Yorum:
    12 Tem. 2008
YAZIYI BEĞENDİN Mİ?

Yazını çok beğendim. Yeni yazılarının e-posta adresime gelmesini istiyorum :)

Haberler RSS Yorumlar RSS

© 2009 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.