Mysql türkçe karekter sorunu
|
#6370 |
|
|
Kaan
User is:
Posts: 2772
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. 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 |













