[Linux-programlama] Re: MySQL'de UTF8 ve Latin1 sorusu
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
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
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
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
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
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
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
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
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
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
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
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
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
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