[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Nuri AKMAN
Merhaba Atıf Bey,

Zaman zaman karşıma çıkan bu karakterset konusunu Google ve sizlerin
desteği ile çözme gayretindeyim.

Google'da *php mysql utf8 encoding problem* araması yaptığımda, google'ın 1
milyondan fazla sonuç bulduğunu gördüm. Sanırım sizin tespit ettiğiniz
mesajlar da bu rakama dahil :)

Keşke tüm sorunlar sadece bir doküman okunduğunda çözülebilecek kadar kolay
olsaydı da, biz programcılar anlamsız sorunlar için google araması yapmakta
geçen zamanımızı sosyal etkinliklerde kullanabilsek!

Son olarak; Sadece bu konuda değil, her konuda elimden geldiğince araştırma
yapmaya çalışıyorum. Çoğu zaman çözüme ulaşıyorum. Neticeye varamayınca da
listedeki üstadlara başvuruyorum.

Selamlar,
Nuri Akman


2012/2/20 Atıf CEYLAN meh...@atifceylan.com

 **
 Sayin Nuri Hocam,
 Ben sizin ile karakter set olayini o kadar ozdeslestirmisim ki, ufak bir
 google arastirmasi yaptim ve netice itibari ile karakter set olayini basli
 basina bir arastirma konusu yapmanizi oneriyorum.

 2011 17 mayis'ta bir arkadas


  Listelerden takip ettiğim kadarı ile bir süredir karakter seti ile
 ilgili sorun yaşıyorsunuz.

 Aslında defalarca yaşadığınız sorunu çözen yanıtlar aldınız ancak
 sanıyorum bir noktada bir şeyler yanlış gidiyor.


 seklinde baslayan bir mail yazmis,

 2009 kasim 24'te yine benzer bir soru sormussunuz ve yine ayni konu
 etrafina bir suru arkadas yazmis.

  Arkadaşlar,

 MySQL database'de Latin5 olarak oluşturulmuş bir tablom var. Bu
 tablodaki verileri UTF-8 formatlı bir PHP dosyamda kullanmka istediğimde
 TR karakterler bozuk geliyor. Dosyanın UTF-8 olan türünü ANSI yapınca da
 ekrandaki diğer yazılar bozuluyor.

 Bu sorunu MySQL'deki tablomu UTF-8'e çevirmeden çözebileceğim bir metod
 var mıdır?

 Selamlar,
 Nuri Akman


 Acikcasi bu konuyu cidden arastirmanizi oneriyorum.


   --

 /**
  * *@author* Atıf CEYLAN
  * Software Developer  System Admin
  * http://www.atifceylan.com
  */


 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Nuri AKMAN
Merhaba Mehmet Bey,

Karakter setleri konusundaki güzel yazınız için teşekkür ederim, elinize
sağlık.

Yazınıza ufak bir katkıda bulunmak isterim: Yazınızda, UTF bir karateri
tanımlamak için 1 byte yeterli ise 1 byte kullanır, yetmiyorsa 2, o da
yetmiyorsa 4 byte kullanır. şeklindeki ifadenizi UTF bir karateri
tanımlamak için 1 byte yeterli ise 1 byte kullanır, yetmiyorsa 2, *yetmiyorsa
3,* o da yetmiyorsa 4 byte kullanır.

Selamlar,
Nuri Akman


2012/2/20 Mehmet Gürevin mehmetgure...@gmail.com

 Selamlar,

 Atıf Bey'in de ilettiği gibi daha önce de liste üzerinde benzer konular
 konuşulmuş, çözümler tekrar tekrar bulunmuştu.

 Araştırma kısmına katılmak ile birlikte, karakter setleri ile ilgili daha
 önce hazırladığım bir dökümanı
 http://gurevin.net/2012/02/20/metinlerin-dijital-olarak-saklanmasi-ve-karakter-setleri/adresinde
  yayınladım. Başlangıç için en azından UTF hakkında fikir
 verecektir.

 Kolay gelsin..

 20 Şubat 2012 18:19 tarihinde Atıf CEYLAN meh...@atifceylan.com yazdı:

  **
 Sayin Nuri Hocam,
 Ben sizin ile karakter set olayini o kadar ozdeslestirmisim ki, ufak bir
 google arastirmasi yaptim ve netice itibari ile karakter set olayini basli
 basina bir arastirma konusu yapmanizi oneriyorum.

 2011 17 mayis'ta bir arkadas


  Listelerden takip ettiğim kadarı ile bir süredir karakter seti ile
 ilgili sorun yaşıyorsunuz.

 Aslında defalarca yaşadığınız sorunu çözen yanıtlar aldınız ancak
 sanıyorum bir noktada bir şeyler yanlış gidiyor.


 seklinde baslayan bir mail yazmis,

 2009 kasim 24'te yine benzer bir soru sormussunuz ve yine ayni konu
 etrafina bir suru arkadas yazmis.

  Arkadaşlar,

 MySQL database'de Latin5 olarak oluşturulmuş bir tablom var. Bu
 tablodaki verileri UTF-8 formatlı bir PHP dosyamda kullanmka istediğimde
 TR karakterler bozuk geliyor. Dosyanın UTF-8 olan türünü ANSI yapınca da
 ekrandaki diğer yazılar bozuluyor.

 Bu sorunu MySQL'deki tablomu UTF-8'e çevirmeden çözebileceğim bir metod
 var mıdır?

 Selamlar,
 Nuri Akman


 Acikcasi bu konuyu cidden arastirmanizi oneriyorum.


   --

 /**
  * *@author* Atıf CEYLAN
  * Software Developer  System Admin
  * http://www.atifceylan.com
  */


 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php



 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Nuri AKMAN
Merhaba Atıf Bey,

Sucunumun üzerinde farklı siteler host ediliyor, her bir sitenin kendi
domain name'i var.

Bu projemde (www.buproje.com) *SET NAMES utf8* yaptığımda, diğer sitemin
ekran çıktısı (www.digeri.com) bozuluyor. Ve MySQL server'ı restart edene
kadar da bu bozulma devam ediyor. (Başka çözümler de olabilir, ancak ben
restart etmeyi bulabildim).

Selamlar,
Nuri Akman


2012/2/20 Atıf CEYLAN meh...@atifceylan.com

 **

 Komuttan etkilenme ve mysql sunucunun restart edilme gerekcelerini
 anlayamadim ama utf8 bir dil seti ve turkce icin 2 alternatifiniz var.

 Ya latin5 kullanacaksiniz ya da utf-8 kullanacaksiniz. set names olayini
 dilerseniz my.cnf dosyasinda mysql client encoding (tam nasil oldugundan
 emin degilim) set edebilirsiniz.

 Buradaki amac sudur, benim clientimin karakter seti sudur diye sunucuya
 soylersiniz ve o da o karakter setinde size veriyi doner. Yani utf8
 saklarsiniz ama icindeki latin5 yani turkce karakterli olan kayitlari
 latin5 olarak cekebilirsiniz.

 Bu bir sorun degil. Bir ozellik. Bu durumda bir yaziliminizda latin1, bir
 digerinde latin5 ve bir baskasinda da utf-8 kullanmanizi saglayan bir
 ozellik...

 Kisacasi, tablonuz latin5 ise ve uygulamaniz utf8 ise yapilacak tek sey
 client encodingin utf-8 oldugu sorgusunu calistirmak veya bunu my.cnf
 dosyasinda default hale getirmek.

 20.02.2012 17:36, Nuri AKMAN yazmış:

 Arkadaşlar,

 Projemde MySQL kullanıyorum.
 Tüm php dosyaların ANSI AS UTF8 encodinge sahip.
 Veritabanımın karakter seti UTF8.
 HTML sayfalarımın chaset meta bilgileri de UTF8.

 mysql_connect satırının hemen altında mysql_query(SET NAMES utf8);
 komutunu *kullanmadığımda* ekranda veritabanından gelen türkçe
 karakterler bozuk geliyor.

 connection'dan sonra mysql_query(SET NAMES utf8) kullandığım sürece
 sorun yok.

 *Soru 1) *mysql_query(SET NAMES utf8) kullanmadan veritabanından gelen
 verilerdeki türkçe sorununu çözme imkanım var mı?


 *Soru 2) *Sunucu üzerinde diğer bir php projemde de MySQL *Latin1*karakter 
 set kullanıyorum. Ancak, yukarıdaki projemi çalıştırdığım anda
 (SET NAMES utf8 satırı işlendikten sonra) eski projemde veritabanından
 gelen türkçe karakterlerin tümü bozuluyor. Bunu düzeltmek için MySQL
 server'î restaqrt ediyorum. Ancak, SET NAMES utf8 satırının her
 görünmesinde Latin1 kullanan projem aynı sorunla karşı karşıya kalıyor.
 UTF8 kullanmayan MySQL veritabanlarımın bu komuttan etkilenmemeleri için ne
 yapabilirim?

 Selamlar,
 Nuri Akman


 --

 /**
  * *@author* Atıf CEYLAN
  * Software Developer  System Admin
  * http://www.atifceylan.com
  */


 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Atıf CEYLAN
Merhaba,
amacim sizin arastirmadan soru sordugunuzu dile getirmek filan degildi.
Bu sekilde bir dusuncem olmadi. Sadece bu konuda uzun zamandir sorun
yasadiginizi ve bir yerlerde gozden kacirdiginiz birseyler olabilecegini
vurgulamak istedim.

karakter set olayi temelde birkac basligi olan bir konu. Bunun php veya
bir programlama dili ile dogrudan iliskisi yok. Veriyi saklarken
karakter set belirlersiniz, birde gosterirken. Eger saklarken karakter
set UTF8 olsun der sonra gosterirken farkli bir set olsun derseniz o
zaman bunu ya db sunucunuzun donusturmesi ya da uygulama tarafinda sizin
donusturmeniz gerekir. UTF-8 temelde ingilizcede olmayan karakterlerin
kullanilmasi icin gelistirilmistir. Siz A yazdiginizda bu A olarak 1
byte olarak saklanir. Ancak Ğ yazmak istediginizde bu iki byte
uzunlugunda bir karakter olarak saklanir.  UTF-8 bircok dili ayni anda
iceren genis bir settir. Bu nedenle sadece turkce kullanilacak bir proje
icin eger db boyutu onemli ise (diyelim ki 10 TB veri saklamak
gerekiyor) o zaman sadece o dile has olusturulmus karakter set ile veri
kaydedilebilir. Ornegin Latin5 (ISO-8859-9). Bunda durum utf-8 gibi
degildir. Tum set sadece turkce karakterleri icerir diyelim. 

Buna gore siz veritabaninizda (mysql icin) tum tablolarinizi veya her
field icin ayri ayri dil seti kullanabilirsiniz. Ancak latin1 (isvecce)
setindeki bir tabloya turkce karakter basarsaniz o zaman db ile
kulahlari degisirsiniz.
Burada muhim olan ikinci nokta devreye girer. O da veritabanindan
saklandigi formattaki veriyi hangi set olarak isteyeceginizdir. Mysql
default olarak latin1 kabul eder (hala oyle mi bilemiyorum). Bunun
anlami client tarafinda (php olabilir baska bir client olabilir) veri
cekilecegi zaman mysql veriyi client default karakter setine gore
gondermek istemesidir. Eger siz mysql konfigurasyonunda global olarak
benim client'larimin karakter setleri latin5 derseniz, sakladigi veri
utf-8 ise veriyi latin5 olarak cevirip gondermek ister. Arada japon
karakteri varsa hata alirsiniz (mi emin degilim belki warning donuyordur
ya da o karakterleri atlayarak gonderiyordur bilemeyecegim. pg tarafinda
error alirsiniz.) 

Birde ikinci yontem olarak client db sunucuya kendi karakter setinin ne
oldugu bilgisini gonderir ve veriyi ona gore hazirlamasinin talimatini
verir. set name muhabbeti budur. Buna gore sizin client tarafinda da iki
konu onem arzeder. 

Uygulama kodlarinizin icerisindeki ekrana basilacak kisim hangi dilde
kayededilmis ise taryiciya sayfanin karakter setinin de o oldugunu
bildirmeniz gerekir. Ornegin. veri_goster.php dosyaniz icerisinde
kodlama yaparken, editor-ide her ne kullaniyorsaniz, kaydetme islemini
utf8 yaptiniz. sonra html meta tag ve header'da karakter set olarak utf8
yazdiniz.bu php dosya icerisinde echo merhaba TÜRKİYE; yazdiniz ve
altina da veritabanindan gelen bir veriyi basmak istediniz.

Eger db'de sakladiginiz veri latin5, db global degiskenleri icerisinde
client encoding latin5 ise ve siz kodunuzda set name ile herhangi bir
encoding belirtmemis iseniz bu durumda ekrana basacaginiz veride echo
ile yazdiginiz kisim normal gorunecek ama veritabanindan gelen kisim
bozuk gorunecektir. Tarayiciya header ve meta tag (explorer meta tag baz
alir, firefox header) olarak belirttigininiz karakter set iso-8859-9
yani turkce ise bu durumda veritabanindan gelen bilgi dogru gorunecek,
echo ile yazdiginiz bilgi bozuk gorunecektir. 

Yazim yanlisi filan varsa kusura bakmayin. yeniden okumadan
gonderiyorum :)



On Tue, 2012-02-21 at 10:15 +0200, Nuri AKMAN wrote:

 Merhaba Atıf Bey,
 
 Zaman zaman karşıma çıkan bu karakterset konusunu Google ve sizlerin
 desteği ile çözme gayretindeyim.
 
 Google'da php mysql utf8 encoding problem araması yaptığımda,
 google'ın 1 milyondan fazla sonuç bulduğunu gördüm. Sanırım sizin
 tespit ettiğiniz mesajlar da bu rakama dahil :)
 
 Keşke tüm sorunlar sadece bir doküman okunduğunda çözülebilecek kadar
 kolay olsaydı da, biz programcılar anlamsız sorunlar için google
 araması yapmakta geçen zamanımızı sosyal etkinliklerde kullanabilsek!
 
 Son olarak; Sadece bu konuda değil, her konuda elimden geldiğince
 araştırma yapmaya çalışıyorum. Çoğu zaman çözüme ulaşıyorum. Neticeye
 varamayınca da listedeki üstadlara başvuruyorum.
 
 Selamlar,
 Nuri Akman
 
 
 
 2012/2/20 Atıf CEYLAN meh...@atifceylan.com
 
 Sayin Nuri Hocam,
 Ben sizin ile karakter set olayini o kadar ozdeslestirmisim
 ki, ufak bir google arastirmasi yaptim ve netice itibari ile
 karakter set olayini basli basina bir arastirma konusu
 yapmanizi oneriyorum. 
 
 2011 17 mayis'ta bir arkadas 
 
 
  Listelerden takip ettiğim kadarı ile bir süredir karakter seti ile
  ilgili sorun yaşıyorsunuz.
  
  Aslında defalarca yaşadığınız sorunu çözen yanıtlar aldınız ancak
  sanıyorum bir noktada bir şeyler yanlış gidiyor.
 
 
 seklinde baslayan bir mail yazmis, 
 
 

[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Atıf CEYLAN
Hocam 
mysql_query(SET NAMES utf8); yerine 
mysql_query(SET NAME 'UTF-8'); denermisiniz. 

ilki sanirim global olarak degistiriyor. 

On Tue, 2012-02-21 at 10:27 +0200, Nuri AKMAN wrote:

 SET NAMES utf8

-- 

/**
 * @author Atıf CEYLAN
 * Software Developer  System Admin
 * http://www.atifceylan.com
 */
___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Atıf CEYLAN
Tamamen sacma bisey olmus. Mysql tarafini iyi bilmedigimden sallamisim.
sizin yazdiginiz dogru. Bu durumda diger sitenizin verilerinin bozuk
gorunmesi biraz garip. Cunku bu komut sadece o db baglantisina ait
oturum boyunca gecerli olur. Bir yerde bir yanlislik var.

On Tue, 2012-02-21 at 10:53 +0200, Atıf CEYLAN wrote:

 Hocam 
 mysql_query(SET NAMES utf8); yerine 
 mysql_query(SET NAME 'UTF-8'); denermisiniz. 
 
 ilki sanirim global olarak degistiriyor. 
 
 On Tue, 2012-02-21 at 10:27 +0200, Nuri AKMAN wrote:
 
  SET NAMES utf8
 
 -- 
 
 /**
  * @author Atıf CEYLAN
  * Software Developer  System Admin
  * http://www.atifceylan.com
  */
 
 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


-- 

/**
 * @author Atıf CEYLAN
 * Software Developer  System Admin
 * http://www.atifceylan.com
 */
___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Nuri AKMAN
Denedim, mysql_query(SET NAME 'UTF-8') kullandığımda karakterler bozuk
görünmeye devam ediyor.

2012/2/21 Atıf CEYLAN meh...@atifceylan.com

 **
 Hocam
 mysql_query(SET NAMES utf8); yerine
 mysql_query(SET NAME 'UTF-8'); denermisiniz.

 ilki sanirim global olarak degistiriyor.

 On Tue, 2012-02-21 at 10:27 +0200, Nuri AKMAN wrote:

 SET NAMES utf8

   --

 /**
  * *@author* Atıf CEYLAN
  * Software Developer  System Admin
  * http://www.atifceylan.com
  */


 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Mehmet Gürevin
Selamlar,

Bir umut mysql dökümantasyonundan şu alıntıyı yapayım;

A SET NAMES '*x*' statement is equivalent to these three statements:

SET character_set_client = *x*;
SET character_set_results = *x*;
SET character_set_connection = *x*;

SET NAMES bu üçünü yapan bir kısayol, bunları, ayrı ayrı dener misiniz?

Asıl değinmek istediğim nokta ise mysql'e bir bağlantı açtığınızda, o
bağlantı üstünde set names çalıştırırsanız yalnızca aktif oturumda geçerli
bir tanımlama yapmış olursunuz.

Bu tanım diğer baplantıları etkilemez. Sizin kurgunuzda iki farklı sitenin
(dolayısı ile iki farklı connection'un -mı acaba?--) bu tanımlanmadan
etkilendiğini, sorunu mysql'i yeniden başlatınca giderebildiğinizi
anlıyoruz.

Ve size sorular hazırladım;

* acaba veritabanı bağlantıları havuzlanıyor olabilir mi?
* php tarfında persistence connection kullanıyor musunuz?
* mysql'i restart etmek yerine apache'yi yeniden başlattığınızda durum
çözülüyor mu?

Hala olmadı ise mysql-proxy kurarak bağlantıları debug etmek, mysql server
istatistiklerinden aktif bağlantıları incelemek fikir verebilir.

Kolay gelsin..

21 Şubat 2012 11:46 tarihinde Nuri AKMAN nuriak...@gmail.com yazdı:

 Merhaba Atıf Bey,

 Zaman ayırıp uzun uzun yazdığınız bu faydalı mesaj için çok çok teşekkür
 ederim. Yazdıklarınızdan hareketle yaptıklarımı tekrar gözden geçirdim.
 Tarayiciya header ve meta tag ile göndermeyi ayrı ayrı denedim. Sonuç
 olumsuz.

 Test için bir dosya hazırladım. Ayrıca, mysql tablosunun da dump'ını
 aldım. Bunları ekte görebilirsiniz. Belki veritabanında bir hata vardır
 düşüncesiyle inceleyebilmeniz için ekte sunuyorum. Kodu çalıştırdığımdaki
 firefox ekran görüntüsü de yine dosya içinde mevcut.

 Eğer, set names komutu kullanmadan doğru çıktıyı alabilirsem sorunum
 çözülecek düşüncesindeyim.

 Selamlar,
 Nuri Akman



 2012/2/21 Atıf CEYLAN meh...@atifceylan.com

 **
 Merhaba,
 amacim sizin arastirmadan soru sordugunuzu dile getirmek filan degildi.
 Bu sekilde bir dusuncem olmadi. Sadece bu konuda uzun zamandir sorun
 yasadiginizi ve bir yerlerde gozden kacirdiginiz birseyler olabilecegini
 vurgulamak istedim.

 karakter set olayi temelde birkac basligi olan bir konu. Bunun php veya
 bir programlama dili ile dogrudan iliskisi yok. Veriyi saklarken karakter
 set belirlersiniz, birde gosterirken. Eger saklarken karakter set UTF8
 olsun der sonra gosterirken farkli bir set olsun derseniz o zaman bunu ya
 db sunucunuzun donusturmesi ya da uygulama tarafinda sizin donusturmeniz
 gerekir. UTF-8 temelde ingilizcede olmayan karakterlerin kullanilmasi icin
 gelistirilmistir. Siz A yazdiginizda bu A olarak 1 byte olarak
 saklanir. Ancak Ğ yazmak istediginizde bu iki byte uzunlugunda bir
 karakter olarak saklanir.  UTF-8 bircok dili ayni anda iceren genis bir
 settir. Bu nedenle sadece turkce kullanilacak bir proje icin eger db boyutu
 onemli ise (diyelim ki 10 TB veri saklamak gerekiyor) o zaman sadece o dile
 has olusturulmus karakter set ile veri kaydedilebilir. Ornegin Latin5
 (ISO-8859-9). Bunda durum utf-8 gibi degildir. Tum set sadece turkce
 karakterleri icerir diyelim.

 Buna gore siz veritabaninizda (mysql icin) tum tablolarinizi veya her
 field icin ayri ayri dil seti kullanabilirsiniz. Ancak latin1 (isvecce)
 setindeki bir tabloya turkce karakter basarsaniz o zaman db ile kulahlari
 degisirsiniz.
 Burada muhim olan ikinci nokta devreye girer. O da veritabanindan
 saklandigi formattaki veriyi hangi set olarak isteyeceginizdir. Mysql
 default olarak latin1 kabul eder (hala oyle mi bilemiyorum). Bunun anlami
 client tarafinda (php olabilir baska bir client olabilir) veri cekilecegi
 zaman mysql veriyi client default karakter setine gore gondermek
 istemesidir. Eger siz mysql konfigurasyonunda global olarak benim
 client'larimin karakter setleri latin5 derseniz, sakladigi veri utf-8 ise
 veriyi latin5 olarak cevirip gondermek ister. Arada japon karakteri varsa
 hata alirsiniz (mi emin degilim belki warning donuyordur ya da o
 karakterleri atlayarak gonderiyordur bilemeyecegim. pg tarafinda error
 alirsiniz.)

 Birde ikinci yontem olarak client db sunucuya kendi karakter setinin ne
 oldugu bilgisini gonderir ve veriyi ona gore hazirlamasinin talimatini
 verir. set name muhabbeti budur. Buna gore sizin client tarafinda da iki
 konu onem arzeder.

 Uygulama kodlarinizin icerisindeki ekrana basilacak kisim hangi dilde
 kayededilmis ise taryiciya sayfanin karakter setinin de o oldugunu
 bildirmeniz gerekir. Ornegin. veri_goster.php dosyaniz icerisinde kodlama
 yaparken, editor-ide her ne kullaniyorsaniz, kaydetme islemini utf8
 yaptiniz. sonra html meta tag ve header'da karakter set olarak utf8
 yazdiniz.bu php dosya icerisinde echo merhaba TÜRKİYE; yazdiniz ve altina
 da veritabanindan gelen bir veriyi basmak istediniz.

 Eger db'de sakladiginiz veri latin5, db global degiskenleri icerisinde
 client encoding latin5 ise ve siz kodunuzda set name ile herhangi bir
 encoding belirtmemis iseniz bu durumda ekrana basacaginiz veride echo ile
 

[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik Atıf CEYLAN
Hocam herhangi bir sorun gorunmuyor. bende de gonderdiginiz ekran
goruntusu olustu. Cunku default client encodingim latin1. 
Bu durumda ilk print_nice ile basilan yerdeki sorguda utf8 kullandigimda
bende goruntu duzeldi. sizde duzelmiyorsa sorun baska demektir ama
duzeliyorsa sorun yok demektir.

Ayirca utf8 degil 8859-9 denedim ve set name 'latin5' yaptim o da
sorunsuz. Sizin gonderdiginiz ekran goruntusunde de set name yaptiginiz
yerden sonrakiler duzgun gorunuyor.
buna gore sorun nerede? Ayni sayfa icerisinde hem latin5 hem de utf8
kullanmak mi istiyorsunuz? 

Son olarak ufak bir bilgi,
header komutu yerinde ini_set('default_charset', 'UTF-8');
kullanabilirsiniz. Bu hem php karakter setinizi hem headerinizi utf8
oldugunu belirtecek.


On Tue, 2012-02-21 at 11:46 +0200, Nuri AKMAN wrote:

 Merhaba Atıf Bey,
 
 Zaman ayırıp uzun uzun yazdığınız bu faydalı mesaj için çok çok
 teşekkür ederim. Yazdıklarınızdan hareketle yaptıklarımı tekrar gözden
 geçirdim. Tarayiciya header ve meta tag ile göndermeyi ayrı ayrı
 denedim. Sonuç olumsuz.
 
 Test için bir dosya hazırladım. Ayrıca, mysql tablosunun da dump'ını
 aldım. Bunları ekte görebilirsiniz. Belki veritabanında bir hata
 vardır düşüncesiyle inceleyebilmeniz için ekte sunuyorum. Kodu
 çalıştırdığımdaki firefox ekran görüntüsü de yine dosya içinde mevcut.
 
 Eğer, set names komutu kullanmadan doğru çıktıyı alabilirsem sorunum
 çözülecek düşüncesindeyim.
 
 Selamlar,
 Nuri Akman
 
 
 
 2012/2/21 Atıf CEYLAN meh...@atifceylan.com
 
 Merhaba,
 amacim sizin arastirmadan soru sordugunuzu dile getirmek filan
 degildi. Bu sekilde bir dusuncem olmadi. Sadece bu konuda uzun
 zamandir sorun yasadiginizi ve bir yerlerde gozden
 kacirdiginiz birseyler olabilecegini vurgulamak istedim.
 
 karakter set olayi temelde birkac basligi olan bir konu. Bunun
 php veya bir programlama dili ile dogrudan iliskisi yok.
 Veriyi saklarken karakter set belirlersiniz, birde
 gosterirken. Eger saklarken karakter set UTF8 olsun der sonra
 gosterirken farkli bir set olsun derseniz o zaman bunu ya db
 sunucunuzun donusturmesi ya da uygulama tarafinda sizin
 donusturmeniz gerekir. UTF-8 temelde ingilizcede olmayan
 karakterlerin kullanilmasi icin gelistirilmistir. Siz A
 yazdiginizda bu A olarak 1 byte olarak saklanir. Ancak Ğ
 yazmak istediginizde bu iki byte uzunlugunda bir karakter
 olarak saklanir.  UTF-8 bircok dili ayni anda iceren genis bir
 settir. Bu nedenle sadece turkce kullanilacak bir proje icin
 eger db boyutu onemli ise (diyelim ki 10 TB veri saklamak
 gerekiyor) o zaman sadece o dile has olusturulmus karakter set
 ile veri kaydedilebilir. Ornegin Latin5 (ISO-8859-9). Bunda
 durum utf-8 gibi degildir. Tum set sadece turkce karakterleri
 icerir diyelim. 
 
 Buna gore siz veritabaninizda (mysql icin) tum tablolarinizi
 veya her field icin ayri ayri dil seti kullanabilirsiniz.
 Ancak latin1 (isvecce) setindeki bir tabloya turkce karakter
 basarsaniz o zaman db ile kulahlari degisirsiniz.
 Burada muhim olan ikinci nokta devreye girer. O da
 veritabanindan saklandigi formattaki veriyi hangi set olarak
 isteyeceginizdir. Mysql default olarak latin1 kabul eder (hala
 oyle mi bilemiyorum). Bunun anlami client tarafinda (php
 olabilir baska bir client olabilir) veri cekilecegi zaman
 mysql veriyi client default karakter setine gore gondermek
 istemesidir. Eger siz mysql konfigurasyonunda global olarak
 benim client'larimin karakter setleri latin5 derseniz,
 sakladigi veri utf-8 ise veriyi latin5 olarak cevirip
 gondermek ister. Arada japon karakteri varsa hata alirsiniz
 (mi emin degilim belki warning donuyordur ya da o karakterleri
 atlayarak gonderiyordur bilemeyecegim. pg tarafinda error
 alirsiniz.) 
 
 Birde ikinci yontem olarak client db sunucuya kendi karakter
 setinin ne oldugu bilgisini gonderir ve veriyi ona gore
 hazirlamasinin talimatini verir. set name muhabbeti budur.
 Buna gore sizin client tarafinda da iki konu onem arzeder. 
 
 Uygulama kodlarinizin icerisindeki ekrana basilacak kisim
 hangi dilde kayededilmis ise taryiciya sayfanin karakter
 setinin de o oldugunu bildirmeniz gerekir. Ornegin.
 veri_goster.php dosyaniz icerisinde kodlama yaparken,
 editor-ide her ne kullaniyorsaniz, kaydetme islemini utf8
 yaptiniz. sonra html meta tag ve header'da karakter set olarak
 utf8 yazdiniz.bu php dosya icerisinde echo merhaba TÜRKİYE;
 yazdiniz ve altina da veritabanindan gelen bir veriyi basmak
 istediniz.
 
 Eger db'de sakladiginiz veri latin5, db global degiskenleri
 icerisinde client encoding latin5 ise ve 

[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-21 Başlik ibrahim YILMAZ
Aşağıdaki şekilde denediğinizde nasıl bir sonuç alıyorsunuz? Bir kaç gün 
önce ben de benzer bir duruma düşmüştüm...


?php echo utf8_decode($string); ?


On 20-02-2012 17:36, Nuri AKMAN wrote:

Arkadaşlar,

Projemde MySQL kullanıyorum.
Tüm php dosyaların ANSI AS UTF8 encodinge sahip.
Veritabanımın karakter seti UTF8.
HTML sayfalarımın chaset meta bilgileri de UTF8.

mysql_connect satırının hemen altında mysql_query(SET NAMES utf8); 
komutunu *kullanmadığımda* ekranda veritabanından gelen türkçe 
karakterler bozuk geliyor.


connection'dan sonra mysql_query(SET NAMES utf8) kullandığım sürece 
sorun yok.


*Soru 1) *mysql_query(SET NAMES utf8) kullanmadan veritabanından 
gelen verilerdeki türkçe sorununu çözme imkanım var mı?



*Soru 2) *Sunucu üzerinde diğer bir php projemde de MySQL *Latin1* 
karakter set kullanıyorum. Ancak, yukarıdaki projemi çalıştırdığım 
anda (SET NAMES utf8 satırı işlendikten sonra) eski projemde 
veritabanından gelen türkçe karakterlerin tümü bozuluyor. Bunu 
düzeltmek için MySQL server'î restaqrt ediyorum. Ancak, SET NAMES utf8 
satırının her görünmesinde Latin1 kullanan projem aynı sorunla karşı 
karşıya kalıyor. UTF8 kullanmayan MySQL veritabanlarımın bu komuttan 
etkilenmemeleri için ne yapabilirim?


Selamlar,
Nuri Akman


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-20 Başlik Atıf CEYLAN
  

Komuttan etkilenme ve mysql sunucunun restart edilme gerekcelerini
anlayamadim ama utf8 bir dil seti ve turkce icin 2 alternatifiniz var.


Ya latin5 kullanacaksiniz ya da utf-8 kullanacaksiniz. set names
olayini dilerseniz my.cnf dosyasinda mysql client encoding (tam nasil
oldugundan emin degilim) set edebilirsiniz. 

Buradaki amac sudur, benim
clientimin karakter seti sudur diye sunucuya soylersiniz ve o da o
karakter setinde size veriyi doner. Yani utf8 saklarsiniz ama icindeki
latin5 yani turkce karakterli olan kayitlari latin5 olarak
cekebilirsiniz. 

Bu bir sorun degil. Bir ozellik. Bu durumda bir
yaziliminizda latin1, bir digerinde latin5 ve bir baskasinda da utf-8
kullanmanizi saglayan bir ozellik... 

Kisacasi, tablonuz latin5 ise ve
uygulamaniz utf8 ise yapilacak tek sey client encodingin utf-8 oldugu
sorgusunu calistirmak veya bunu my.cnf dosyasinda default hale getirmek.


20.02.2012 17:36, Nuri AKMAN yazmış: 

 Arkadaşlar,
 
 Projemde
MySQL kullanıyorum. 
 Tüm php dosyaların ANSI AS UTF8 encodinge sahip.

 Veritabanımın karakter seti UTF8.
 HTML sayfalarımın chaset meta
bilgileri de UTF8.
 
 mysql_connect satırının hemen altında
mysql_query(SET NAMES utf8); komutunu KULLANMADIĞIMDA ekranda
veritabanından gelen türkçe karakterler bozuk geliyor.
 

connection'dan sonra mysql_query(SET NAMES utf8) kullandığım sürece
sorun yok.
 
 SORU 1) mysql_query(SET NAMES utf8) kullanmadan
veritabanından gelen verilerdeki türkçe sorununu çözme imkanım var mı?


 SORU 2) Sunucu üzerinde diğer bir php projemde de MySQL LATIN1
karakter set kullanıyorum. Ancak, yukarıdaki projemi çalıştırdığım anda
(SET NAMES utf8 satırı işlendikten sonra) eski projemde veritabanından
gelen türkçe karakterlerin tümü bozuluyor. Bunu düzeltmek için MySQL
server'î restaqrt ediyorum. Ancak, SET NAMES utf8 satırının her
görünmesinde Latin1 kullanan projem aynı sorunla karşı karşıya kalıyor.
UTF8 kullanmayan MySQL veritabanlarımın bu komuttan etkilenmemeleri için
ne yapabilirim?
 
 Selamlar,
 Nuri Akman

-- 

/**
 * @AUTHOR Atıf
CEYLAN
 * Software Developer  System Admin
 *
http://www.atifceylan.com
 */
  ___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-20 Başlik Atıf CEYLAN
Sayin Nuri Hocam,
Ben sizin ile karakter set olayini o kadar ozdeslestirmisim ki, ufak bir
google arastirmasi yaptim ve netice itibari ile karakter set olayini
basli basina bir arastirma konusu yapmanizi oneriyorum.

2011 17 mayis'ta bir arkadas 


 Listelerden takip ettiğim kadarı ile bir süredir karakter seti ile
 ilgili sorun yaşıyorsunuz.
 
 Aslında defalarca yaşadığınız sorunu çözen yanıtlar aldınız ancak
 sanıyorum bir noktada bir şeyler yanlış gidiyor.


seklinde baslayan bir mail yazmis, 

2009 kasim 24'te yine benzer bir soru sormussunuz ve yine ayni konu
etrafina bir suru arkadas yazmis.



 Arkadaşlar,
 
 MySQL database'de Latin5 olarak oluşturulmuş bir tablom var. Bu 
 tablodaki verileri UTF-8 formatlı bir PHP dosyamda kullanmka istediğimde 
 TR karakterler bozuk geliyor. Dosyanın UTF-8 olan türünü ANSI yapınca da 
 ekrandaki diğer yazılar bozuluyor.
 
 Bu sorunu MySQL'deki tablomu UTF-8'e çevirmeden çözebileceğim bir metod 
 var mıdır?
 
 Selamlar,
 Nuri Akman


Acikcasi bu konuyu cidden arastirmanizi oneriyorum.

-- 

/**
 * @author Atıf CEYLAN
 * Software Developer  System Admin
 * http://www.atifceylan.com
 */
___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-20 Başlik Mehmet Gürevin
Selamlar,

Atıf Bey'in de ilettiği gibi daha önce de liste üzerinde benzer konular
konuşulmuş, çözümler tekrar tekrar bulunmuştu.

Araştırma kısmına katılmak ile birlikte, karakter setleri ile ilgili daha
önce hazırladığım bir dökümanı
http://gurevin.net/2012/02/20/metinlerin-dijital-olarak-saklanmasi-ve-karakter-setleri/adresinde
yayınladım. Başlangıç için en azından UTF hakkında fikir
verecektir.

Kolay gelsin..

20 Şubat 2012 18:19 tarihinde Atıf CEYLAN meh...@atifceylan.com yazdı:

 **
 Sayin Nuri Hocam,
 Ben sizin ile karakter set olayini o kadar ozdeslestirmisim ki, ufak bir
 google arastirmasi yaptim ve netice itibari ile karakter set olayini basli
 basina bir arastirma konusu yapmanizi oneriyorum.

 2011 17 mayis'ta bir arkadas


  Listelerden takip ettiğim kadarı ile bir süredir karakter seti ile
 ilgili sorun yaşıyorsunuz.

 Aslında defalarca yaşadığınız sorunu çözen yanıtlar aldınız ancak
 sanıyorum bir noktada bir şeyler yanlış gidiyor.


 seklinde baslayan bir mail yazmis,

 2009 kasim 24'te yine benzer bir soru sormussunuz ve yine ayni konu
 etrafina bir suru arkadas yazmis.

  Arkadaşlar,

 MySQL database'de Latin5 olarak oluşturulmuş bir tablom var. Bu
 tablodaki verileri UTF-8 formatlı bir PHP dosyamda kullanmka istediğimde
 TR karakterler bozuk geliyor. Dosyanın UTF-8 olan türünü ANSI yapınca da
 ekrandaki diğer yazılar bozuluyor.

 Bu sorunu MySQL'deki tablomu UTF-8'e çevirmeden çözebileceğim bir metod
 var mıdır?

 Selamlar,
 Nuri Akman


 Acikcasi bu konuyu cidden arastirmanizi oneriyorum.


   --

 /**
  * *@author* Atıf CEYLAN
  * Software Developer  System Admin
  * http://www.atifceylan.com
  */


 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php


[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu

2012-02-20 Başlik Adem Alp YILDIZ
Anladığım kadarıyla aynı db üzerinde iki farklı projeniz var aynı connect
ile her iki projeyi çalıştırıyorsunuz.
Bunun çözümü iki farklı connection kullanmaktan geçiyor. mysql_query
fonksiyonuna 2. parametre ile mysql_connect'ten dönen linki verirseniz
sorun düzelir.

$link1 = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query(SET NAMES utf8,$link1);


$link2 = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query(SET NAMES latin1,$link2);

yukarıdaki gibi yaparsanız aynı db'ye 2 farklı client encoding ile
bağlanmış olursunuz.

Eğer sorununuzu yanlış anladıysam kusuruma bakmayın.


On Mon, Feb 20, 2012 at 5:36 PM, Nuri AKMAN nuriak...@gmail.com wrote:

 Arkadaşlar,

 Projemde MySQL kullanıyorum.
 Tüm php dosyaların ANSI AS UTF8 encodinge sahip.
 Veritabanımın karakter seti UTF8.
 HTML sayfalarımın chaset meta bilgileri de UTF8.

 mysql_connect satırının hemen altında mysql_query(SET NAMES utf8);
 komutunu *kullanmadığımda* ekranda veritabanından gelen türkçe
 karakterler bozuk geliyor.

 connection'dan sonra mysql_query(SET NAMES utf8) kullandığım sürece
 sorun yok.

 *Soru 1) *mysql_query(SET NAMES utf8) kullanmadan veritabanından gelen
 verilerdeki türkçe sorununu çözme imkanım var mı?


 *Soru 2) *Sunucu üzerinde diğer bir php projemde de MySQL *Latin1*karakter 
 set kullanıyorum. Ancak, yukarıdaki projemi çalıştırdığım anda
 (SET NAMES utf8 satırı işlendikten sonra) eski projemde veritabanından
 gelen türkçe karakterlerin tümü bozuluyor. Bunu düzeltmek için MySQL
 server'î restaqrt ediyorum. Ancak, SET NAMES utf8 satırının her
 görünmesinde Latin1 kullanan projem aynı sorunla karşı karşıya kalıyor.
 UTF8 kullanmayan MySQL veritabanlarımın bu komuttan etkilenmemeleri için ne
 yapabilirim?

 Selamlar,
 Nuri Akman

 ___
 Linux-programlama mailing list
 Linux-programlama@liste.linux.org.tr
 https://liste.linux.org.tr/mailman/listinfo/linux-programlama
 Liste kurallari: http://liste.linux.org.tr/kurallar.php


___
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php