Total Users Online: 0 üye, 205 guest | Tarih/Saat: 2026-08-26 21:39
 
Mysql türkçe karekter sorunu
2011-12-09 21:48 GMT  oklu Alnt
Kaan

User is: Online status   Gender_M
Posts: 2772
Ülke: İstanbul - 34
Meslek: Serbest Meslek
Age: 43

Tan?mlama:

Biz phpciler i?in vazge?ilmez biricik veritaban?m?z Mysql,
h?z?nl? bir sonbahar ak?ama MySQL 4.1.x versiyonunu t?m d?nyaya duyurdu.
Burada garip olan bi?ey yoktu taki ?Collation? denen kavram?n? g?rene kadar.
?lk g?rd?g?mde pek bir gereksiz gelmi?ti bu ?Collation? kavram? bana.Hatta collation = sorunlar zincirinin ilk halkas? olaca??n? daha ilk g?r??te hissetmeye ba?lam??t?m...Bu yeni gelen ?Collation? olay? T?rk?e karakterlerde sorun yarat?yor ve beni ?ileden ??kart?yordu. O zaman ge?ici bir ??z?m olarak localhost da eski MySQL s?r?m? kullanarak ac?lar?ma son vermi?tim. (O an? kurtarma i?g?d?s?yd? bu san?r?m) Fakat ?al??t???m hostlar?m ?oktan yeni mysql e ge?mi?ti. Art?k ?a?a ayak uydurman?n zaman? gelmi?ti.

Bu ?Collation? kavram? nedir, niye, ??kt? nereden geldi ba??m?za, dertsiz ba??m?za dert mi katmak istiyor mysql programc?lar? diye d???n?rken ?Collation? kavram?n?n mant???n? ?grenince, bizim mysql programc? abilerimizin al?nlar?ndan ?pmek geldi i?imden.

MySQL?e ?Collation? yap?s?n? ekleyerek daha modern, geli?mi? ve onbinlerce dolarl?k maliyeti olan veritabanlar?ndaki (Oracle gibi) bir standarda kavu?turmu?lard? biz gariban phpcileri; ?Collation? olay?n?n gelmesi ile sadece ilgili karakter setini y?kleyerek gereksiz karakterlerden kaynaklanan (?nceleri b?t?n dillere ?zg? karakter setlerini y?kleyerek evrensel bir destek sa?l?yordu mysql, ?ince gibi bir dil yap?s? destegini bile y?kl?yorduk bilgisayar?m?za yada hostaki makinam?za ama ne gerek vard? ki, diye d???n?p geli?tirmi?ler yeni ?Collation? olay?n?) a??rl?ktan kurtararak sorgu cevap s?relerinde kayda de?er derecede azalmalar sa?lad???n? ??rendim.Daha az cpu kullanarak daha h?zl? s?rede sorgu cevap mekanizmas?na ?Collation? yap?s?na ge?i? ile kavu?mu? olduk.

Asl?nda ortada mysql t?rk?e karekter sorunu diye bir olay yoktur.Sorun bizim veri tabanlar?m?z? yanl?? karakter setinde olu?turmam?z ve server ayarlar?n?nda birebir yanl?? config?rasyonundan kaynaklanmaktaym??.Ben bilgisayar?mda appserv kullan?r?m.Her?eye ?ncelikle kendi bilgisayar?mdaki karekter setinin dogru tan?mlanmas? gerekti?ini d???neren ba?lad?m ve c:\windows\ klas?r?ndeki my.ini dosyas?n? editlemek i?in kollar? s?vad?m bu dosyay? a?t?m:
my.ini dosyas?nda ki default-character-set=latin1 ?eklindeki sat?rlar? default-character-set=latin5 yapt?m.i?imde bir i? yapman?n saadeti ile arkama yaslan?p olay?n kefini ??kartmay? d???n?rken birden karekterlerin tekrar g?mledi?ini g?r?nce hevesim yine kursa??mda kald?. Biraz daha kurcalay?nca kulland???n?z veritaban?n?n dolay?s?yla tablolar?n da ilgili Collation ayarlar?n?n latin5_turkish_ci olmas? gerekti?ini g?rd?m. Fakat ne yaz?k ki benim tablolar?mdaki field?lar?n collationlar? latin1_swedish_ci idi.Mysql Standart olarak swedish ge?ip i?lem yap?yor eger siz ?zel olarak se?mezseniz. Eger bunu degi?tirmezsek bu s?tunlara yollayaca??n?z kay?tlar ise, isve?ce dili g?z ?n?nde bulundurularak girilir. Bundan ??kan sonu? ?u: isve?cede T?rk?e karakter yer almaz, bu y?zden T?rk?e karakterler yerine ? v.b. karakter ??k?yor. Tablolar?m?z? olu?tururken T?rk?e dil grubuna ait yap? olan latin5_turkish_ci ?eklinde ayarlamam?z gerekiyor. latin5_turkish_ci tablo yap?s? ile biz "ISO 8859-9 Latin-1 modification for Turkish (Latin-5) " haline uygun yap?y? se?mi? oluyoruz.
Yeni tablo olu?tururken mutlaka charset degerini latin5 olarak yaparak olu?turursak art?k karekter sorunu ya?amay?z.

Kod:
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
deneme VARCHAR(150)
) CHARSET=latin5; 

Eski veritabanlar? ne yapacak:
Sistem ayarlar? latin1 olarak ayarl? olan bir makinedesiniz, bu ayarlar? yapsan?z bile bu sefer t?rk?e karakterlerin yerine sayfan?zda soru i?aretleri ??kacakt?r '?' gibi.Yukar?da anlatt???m nedenden dolay? bu makina latin1_swedish_ci ayarl?d?r. isve? dilinde t?rk?e karekterler olmad???ndan siz verileri girerken, mysql onlar? anscii yap?da yerle?tirmi?tir veritaban?na.?rnegin siz "?k?z" kelimesini veritaban?n?za girmi?seniz onun h?credeki degeri "ö ;kü ;z" ?eklindedir.
?Collation? olay?n?n faydas?n? ?k?z ?rneginde daha iyi g?r?yorsunuz san?r?m arkada?lar.Veritaban?ndan direk T?rk?e yaz?lm?? "?k?z" kelimesini aramak ba?ka "ö ;kü ;z" kelimesi ?eklinde aramak ba?ka performans verir.
Bu sorunu ??zmek i?in ise scriptinizde kulland???n?z config.php yada baglant?y? yapt???n?z kod sat?r?n?n alt?na yani
mysql_select_db("$dbname")fonksiyonun alt?na a?a??daki kodlar? eklerseniz sorununuz d?zelir.
:
hp]mysql_query("SET NAMES 'latin5'");  

mysql_query("SET CHARACTER SET latin5");  

mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");  

Kaynak: http://www.r10.net/database/1425.....runu.html

son mesaj 5 dakika ?nce

??z?m olarak en basiti hi? biyeri kurcalamadna gzip yap?p indirin ve y?klerken yine gzip ile y?kleyin hi? bi sorun olmaz.

Ayn? Sorunu ya?ad?ktan sonra Taraf?mca Denendi.
Konuyla İlgili Diğer Başlıklar
Yazı Sorunu
passrecover sorunu
yorum onay sorunu
katagori değiştirme sorunu
Deprecated: Function eregi_replace() Sorunu Acil!

Bu mesaj Kaan tarafından 2011-12-09 21:54 GMT, 5373 Gün önce düzenlendi.
Emlak, Oto Galeri, Rent A Car, ?iir, Edebiyat Script Sipari?lerinizi Verebilirsiniz.
Detaylar ??in: kaan@ntka.org

Seditio 170 ?ndir
Capte M?zik ?ndir
Seditio Toolbar ?ndir

 

Powered by Seditio © 2009-2012 All Rights Reserved