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.

221 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ı 221 adet yorum almıştır ve bunların 11 ile 1 arası görüntülenmektedir. Yorumları RSS ile takip edebilirsiniz.
1 ... 20 21 22 23
cuneyt
| 04 Aralık 2005 , 21:59
#11

Bende bu yöntemle php-nuke u düzelttim peki fantastico kullanan biri için her yüklenen program ızdıraba dönüşecek Mesela oscommerce için böyle bir yöntem varmı yada gerekirmi

| 04 Aralık 2005 , 09:50
#10

aslında bunun için bir uygulama hazırlamayı düşünüyordum. Siz veritabanınızın sql çıktısını alacak ve bu uygulamaya sorgulattığınızda tamamen Türkçe karakterleri düzeltip geri verecek. Fakat daha sonra gördüm ki bu biraz olanaksız. Şöyle ki;
İlk önce veritabanının sql formatında çıktısını alın. Alın sql dosyasını elde edin. Sonrasında bu dosyayı herhangi bir metin editörü ile açın. Türkçe karakterlerin yer aldığı bölümlere gidin. Benim incelemem sonucunda tüm Türkçe karakterler yerine ? yada tersinin kullanıldığını gördüm. böyle olunca ayırt edemiyorsunuz, acaba hangi karakter diye. Yoksa o dosya içerisinde toplu bul-değiştir uygulatabilirsiniz.
Fakat php hatalı bu sütunlardan verileri aldıktan sonra ekrana Türkçe çıktı veriyor. Yani ayırt edilemeyen karakterleri mysql birşekilde ayırt edip yolluyor. Bu kısmı da henüz ben anlamış değilim.
Dediğim gibi eğer çözebilirsem, yakında buna yönelik karakter çevirici bir uygulama yazacağım site üstüne :)

| 04 Aralık 2005 , 01:03
#9

Peki, su anda tamamen latin1_bin seklindeki bir veritabani veri kayipleri ve Turkce karakter sorunları yasamadan nasil latin5_turkish’e cevirilir.

Daha once collation tanimlanmayan bir veritabanini kolaylıkla Turkce’ye cevirdim ve yazidaki kod yardimiyla da sorun yasamadan sayfada gosterebildim ve order by vb.leri düzeldi, fakat yukarıdaki sorunum var…

Örneğin http://www.petarkadas.com sitesinde yaziyoruz bu problemi…

Oguz
| 28 Kasım 2005 , 23:44
#8

Merhabalar ,
Kullanmış oldugum haber admin girişli haber sisteminde
“newsadmin” sistem başlı başına duzgun çalışıyor fakat ornegin haber Turkce karakter içeren bir haber Yazdım Bu yine program içinde Duzgun gorunuyor haberleri gosteren dosyayı başka bi Klosordeki indexime include edince Sorun başlıyor
NoT: haber sisteminde girilen turkce karakterlerde mysql e hatalı işleniyor fakat kendı ıcınde duzgun çalışıyor.. :cry:

| 22 Kasım 2005 , 21:21
#7

Burak Unal! rodnif ve Jeasus ve desTRoyer rumuzuyla arkadaşım ,
http://www.dmry.net/phpnuke-ve.....r-problemi

ve ayrıca lütfen sitemi phpnuke yardım siteleriyle karıştırmayın. Burası yardım sitesi değil! ben yazarım, yazı hakkında ki yorumları kabul ederim. Yazı dışındaki ikinci ve üstü konuları değerlendirmem.
Yazıyı yayınladıktan sonra durumu farkettim aksi halde tavrım daha farklı olurdu. Ben, aynı mesajı her siteye kopyala yapıştır yapan ziyaretçilerden hoşlanan biri değilim.
Niye böyle bir tavır sergilediğimi de zaten siz anlamışsınızdır.

Burak Unal
| 22 Kasım 2005 , 18:48
#6

daha ayrıntılı yazarsak.. phpnuke’ de
Sisteme varitabanını sorunsuz aktardım ama phpnuke doğru dürüst çalışmıyordu. Yani bloklar ve News modülü anasayfada çıkmıyordu. Ve sayfanın altındaki nuke_config de bulunan yazılarda da türkçe karakter sorunu vardı.
Attığım veritabanı latin5_turkish_ci ile kodlanmıştı.
Daha sonra dil ile ilgili bir sorun olduğu için nuke_stories deki ve nuke_blocks daki “alanguage” alanındaki Karşılaştırma(Collation) bölümünü başka herhangi bir dille ya da utf8_turkish_ci ile değiştirince anasayfada haberler ve bloklar göründü fakat bu sefer de türkçe karakter sorunu var. phpmyadmin deki verilerde türkçe karakterler görünüyor sorun yok ama sitede görünmüyor. ı, İ ve ğ de sorun var.

.php dosyalarında da sorun yok. sorun sadece veritabanından siteye aktarılan yazılarda..

Bu sorunu nasıl çözebilirim?
Saygılar.

Burak Unal
| 22 Kasım 2005 , 18:43
#5

Arkadaşlar,
___
mysql_query(”SET NAMES ‘latin5′”); satırını select_db satırınıjn altına yazınca sorunum düzeldi.
___

bu işlemi sadece sunucu sahibi olanlar mı yapabilir? Sunucu şu anda elimizin altında değil. Bu işlemi yapabilir miyiz? Yapabiliyorsak nereden yapacağız?
teşekkürler.

| 14 Kasım 2005 , 02:16
#4

Siz de sağolun Selçuk Bey, geçmiş olsun o halde ;)

Selçuk ARSLAN
| 14 Kasım 2005 , 00:12
#3

slm lar,

bir veritabanı yaratmıştım. veritabanının collatşon settings i “latin5_turkish_ci” idi. PHP sayfasından veri girip veritabanına baktığımda Ş,İ,ı gibi karakterlerin yerine ? karakteri ataması yapılıyordu. mysql_query(”SET NAMES ‘latin5′”); satırını select_db satırınıjn altına yazınca sorunum düzeldi. Ve bu soruna çözümü epey bir süre aradıktan sonra bulduğumu belirtip, teşekkürlerimi iletiyorum

| 12 Kasım 2005 , 11:26
#2

Dostum sizin yaptığınız işlem yanlıştır, yazıda yanlış olan yoktur. Yazı yanlış olsaydı, ne dmry.net ne de zonguldak.us çalışmazdı şu zamana kadar. Lütfen asmadan önce hatanızın sebebini öğreniniz.
Hatanızın sebebi varolan bir satırı ikinci kere eklemeye çalışmanızdır. Böyle durumlarda Duplicate entry mesajını alırsınız. Mysql size, ‘şahan’, ‘466′, ‘0′ satırı zaten eklenmiş diyor..

1 ... 20 21 22 23
promosyon Oyunlar prefabrik Düşük fiyat listesi |Teknolojik Ürünler| promosyon promosyon
seo Ertan Dönmez Godaddy Promo Codes Reklam Ver! Reklam Ver! Reklam Ver! Reklam Ver!
© 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