Mysql türkçe karekter sorunu - Google Fan Webmaster Forum
Google Fan Webmaster Forum  
herşeyi sana yazdım

Geri git   Google Fan Webmaster Forum > Genel Programlama > Database
KEY
Kayıt ol Articles Sosyal Gruplar Forumları Okundu Kabul Et

Database Access Oracle MSSQL MySQL Sybase DB2 Databases

Cevapla
 
LinkBack Seçenekler
  1  
Alt 31-07-2006, 07:03:47
radministrator
 
Standart Mysql türkçe karekter sorunu

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.

PHP- Kodu:
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 "&ouml ;k&uuml ;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 "&ouml ;k&uuml ;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.

PHP- Kodu:
mysql_query("SET NAMES 'latin5'"); 
mysql_query("SET CHARACTER SET latin5"); 
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'"); 
__________________
Bir Güldün Yâr sen, hep elime batanı
Seni dalından kopardım, kandoldu avuçlarım...

Alıntı ile Cevapla
  2  
Alt 31-07-2006, 19:25:16
 
Standart

Alıntı:
PHP Kodu:
mysql_query("SET NAMES 'latin5'");
mysql_query("SET CHARACTER SET latin5");
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'");
bukodu ekleyince

Kod:
Warning: mysql_query(): Access denied for user 'nobody'@'localhost' (using password: NO) in /home/gudik/public_html/forum/config.php on line 16

Warning: mysql_query(): A link to the server could not be established in /home/gudik/public_html/forum/config.php on line 16

Warning: mysql_query(): Access denied for user 'nobody'@'localhost' (using password: NO) in /home/gudik/public_html/forum/config.php on line 17

Warning: mysql_query(): A link to the server could not be established in /home/gudik/public_html/forum/config.php on line 17

Warning: mysql_query(): Access denied for user 'nobody'@'localhost' (using password: NO) in /home/gudik/public_html/forum/config.php on line 18

Warning: mysql_query(): A link to the server could not be established in /home/gudik/public_html/forum/config.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /home/gudik/public_html/forum/config.php:16) in /home/gudik/public_html/forum/includes/sessions.php on line 366

Warning: Cannot modify header information - headers already sent by (output started at /home/gudik/public_html/forum/config.php:16) in /home/gudik/public_html/forum/includes/sessions.php on line 367

Warning: Cannot modify header information - headers already sent by (output started at /home/gudik/public_html/forum/config.php:16) in /home/gudik/public_html/forum/includes/page_header.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at /home/gudik/public_html/forum/config.php:16) in /home/gudik/public_html/forum/includes/page_header.php on line 484

Warning: Cannot modify header information - headers already sent by (output started at /home/gudik/public_html/forum/config.php:16) in /home/gudik/public_html/forum/includes/page_header.php on line 486

Warning: Cannot modify header information - headers already sent by (output started at /home/gudik/public_html/forum/config.php:16) in /home/gudik/public_html/forum/includes/page_header.php on line 487
tüm sayfalarda bu hatayı alıyom php bb kullanıyom config.php ye ekledim başka yeremi eklemem gerekiyodu acaba
Alıntı ile Cevapla
  3  
Alt 31-07-2006, 23:41:13
radministrator
 
Standart

phpbb de config.php dosyasında direk mysql connection komutları yok ki.
bu kodları mysql_query komutundan sonra kullanman gerek.
__________________
Bir Güldün Yâr sen, hep elime batanı
Seni dalından kopardım, kandoldu avuçlarım...

Alıntı ile Cevapla
  4  
Alt 01-08-2006, 14:50:15
 
Standart

Alıntı:
radmin Nickli Üyeden Alıntı
phpbb de config.php dosyasında direk mysql connection komutları yok ki.
bu kodları mysql_query komutundan sonra kullanman gerek.
phpbb de hangi dosya içinde peki nasıl bulucam tek tek mi bakıcam hepsine
Alıntı ile Cevapla
  5  
Alt 15-08-2006, 23:30:24
 
Standart

PHP- Kodu:
mysql_query("SET NAMES 'latin5'");  
mysql_query("SET CHARACTER SET latin5");  
mysql_query("SET COLLATION_CONNECTION = 'latin5_turkish_ci'"); 
Burdaki kodlar eğer sql deki veriler düzgünse yanı SQL de dahi TR karakterler normal şekilde gözüküyor ise sitede de normal çıkartmasını sağladı.

Fakat SQL deki verilerdede TR Karakter sorunu var. Bu kodu MYSQL bağlantısı yaptığımız yere koysam dahi işe yaramıyor.

SQL içerisindeki karakter bozuklurlarını tümden giderici normal TR karaktere göre çevirici bir program varmıdır. Eğer yoksa bu sorunlu karakterleri nasıl Türkçeye çeviririz.

(Not: Not defteri vs. açıp değiştir diyerek denedim boyut büyük olduğu için tıkanmalar meydana geliyor.)

MySQL dan karakter setini latin5 yaptığım halde yinede düzelmiyor. Bu sorunu nasıl çözebiliriz.
Şimdiden teşekkürler.
Alıntı ile Cevapla
  6  
Alt 06-10-2006, 21:11:47
 
Standart

ewet yaw bu sorun bendede var phpbb de bunun daha farklı çözüm yolu yokmudur.
__________________
Bi süre ortalarda yokum...
Alıntı ile Cevapla
  7  
Alt 22-11-2006, 21:23:43
 
Standart

hocam kullandıgım aykutbet v1 scriptinde cfg yok. settings.php ye baktıysamda göremedim yedegi atarken) CHARSET=latin5; denediysem de fayda etmedi
__________________
Lütfen r10'u çoçukların ulaşamayacağı yerlerde muhafaza ediniz.
Alıntı ile Cevapla
  8  
Alt 23-11-2006, 23:34:10
Üyeliği durduruldu
 
Standart

peki sql dosyanin icinde turkce karakterler duzgun cikiyormu?
Alıntı ile Cevapla
  9  
Alt 27-11-2006, 11:48:54
Üyeliği durduruldu
 
Standart

ben VB forumun db yedeğini almıştım yeni hostinge geçicektim. Geçtim DB'i kurdum dosyaları attım DB'ide attım phpmyAdmin'e ama Ç yerine ?, Ş yerine ? gibi karakterlerle karşılaştım. SQL Dosyasının içinde bütün karakterler düzgün çıkıyor.
Alıntı ile Cevapla
  10  
Alt 25-12-2006, 22:10:52
 
Standart

bu kullanılan sistemdeki versiyonundan kaynaklanabilirmi acaba
Alıntı ile Cevapla
Cevapla


Bookmarks

Seçenekler

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Açık



Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 05:33:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

“İnsanların en hayırlısı, insanlara faydalı olandır”. H.Ş

Hosting by Radore Hosting

İçerik sağlayacı paylaşım sitelerinden biri olan R10.net WebMaster Forum Adresimizde 5651 Sayılı Kanun’un 8. Maddesine ve T.C.K’nın 125. Maddesine göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur. R10.net hakkında yapılacak tüm hukuksal Şikayetler adresi ile iletişime geçilmesi halinde ilgili kanunlar ve yönetmelikler çerçevesinde en geç 1 (Bir) Hafta içerisinde R10.net yönetimi olarak tarafımızdan gereken işlemler yapılacak ve Avukatlarımız size dönüş yapacaktır.
ARGUS_OK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252