Bu makalede bir çok arkadaþýmýzýn resmen iþkence yaþadýðý mysql 4.1.x sürümü ve türkçe karakterlerin sorunsuz, düzgün þekilde görüntülenebilmesi için nasýl ayarlanacaðýný anlatacaðým.
Ýlk önce çalýþmaya baþlamadan önce: http://dev.mysql.com/downloads adresinden MySQL 4.1.x serisinin son sürümünü download ediyoruz.
Konumuz türkçe karakterler olduðu için mysql’nin kurulumunu anlatmýyorum.
Söze baþlamak gerekirse, öncelikle MySQL 4.1.x sürümünde türkçe karakter problemi baþtan beri yoktur, problemin asýl kaynaðý bizim veri tabanlarýmýzý yanlýþ karakter setinde oluþturmamýz ve server ayarlarýnýnda birebir yanlýþ configürasyonundan kaynaklanmaktadýr.
MySQL 4.1.x serisi ile birlikte yeni bir özellik olarak gelen, karakter setleri (charset) ve buna eþit karþýlaþtýrma setleri (collation), özellikle daha önceki 4.0.x ve 3.0x serilerindeki sýralama ve arama sorgularýndaki yaþanan problemi tamamen ortadan kaldýrýyor.
MySQL 4.1.x serisinde türkçe karakterler için 2 ayrý karþýlaþtýrma seçeneði bulunmaktadýr.
Bunlar;
- latin5_bin (büyük, küçük harf duyarlý)
- latin5_turkish_ci (büyük, küçük harf duyarsýz)
karþýlaþtýrmalarýdýr, bizim tercihimiz herzaman latin5_turkish_ci karþýlaþtýrmasý olmalýdýr. Bu karþýlaþtýrma sayfalarda ISO-8859-9 setine denk gelmektedir.
MySQL’de latin5 karakter seti, varsayýlan karþýlaþtýrma olarak latin5_turkish_ci karþýlaþtýrmasýný kullanýyor, tablolarý yada veri tabanlarýný oluþtururken bunu ekstradan girmenize gerek yok ancak girmenizin zarardan çok faydasý olacaktýr.
Tablolarýnýzý oluþtururken herzaman aþaðýdaki gibi oluþturun, mesela latin5 karakter seti ve karþýlaþtýrma latin5_turkish_ci için en doðru tablo oluþturmasýný yapalým:
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
) CHARSET=latin5;
Bu tabloda karþýlaþtýrma seçeneði girilmediði için varsayýlan karþýlaþtýrma; latin5_turkish_ci kullanýr.
Åžimdide latin5_bin karþýlaþtýrmasý için doðru bir tablo oluþturalým;
CREATE TABLE tablo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
) CHARSET=latin5 COLLATE=latin5_bin;
Bu tabloda COLLATE girdiðimiz için karþýlaþtýrma deðeri olarak latin5_bin deðerini kullanacaktýr.
En önemli kýsým veri tabaný oluþturmada bitiyor.. eðer yukarýdaki sabit ayarlarla bundan sonraki oluþturulacak bütün tablolarý latin5 ve karþýlaþtýrmasý: latin5_turkish_ci tanýmlamasýný otomatik olarak kullanmasýný saðlamak için, veri tabanýný aþaðýdaki gibi oluþturuyoruz (latin5_turkish_ci için örnek);
CREATE DATABASE veritabanýadý CHARSET=latin5;
bu komutla veri tabanýmýzý oluþturduðumuzda, karþýlaþtýrma deðeri otomatik olarak latin5_turkish_ci kullanýlacaktýr.
Eðer tablolarda latin5_bin karþýlaþtýrmasýný kullanmak istiyorsak, onu ayrýca veri tabanýný oluþtururken tanýmlýyoruz;
CREATE DATABASE veritabanýadý CHARSET=latin5 COLLATE=latin5_bin;
Ancak sistem ayarlarý latin1 olarak ayarlý olan bir makinede, bu ayarlarý yapsanýz bile bu sefer türkçe karakterlerin yerine sayfanýzda soru iþaretleri çýkacaktýr ‘?’ gibi.
Bununda çözümü çok basit, mysql baðlantýsý yaptýðýnýz sorgu koduna aþaðýdaki eklentiyi yapmanýz yeterli;
mysql_query(”SET NAMES ‘latin5′”);
Böylece baðlantý yapýlacak istemcinin karakter seti latin5 olarak tanýmlanýr ve karakterler doðru görüntülenir.
SERVER SAHÝPLERÝ:
Eðer kullanýdýðýz makine kendinize ait ve mysql 4.1.x türkçe ayarlarýný düzgün yapmak istiyorsanýz, aþaðýdakileri uygulamalýsýnýz:
Öncelikle mysql baþlatma satýrýnda þu þekilde deðiþiklik yapýn: (etc/init.d/mysqld)
/usr/bin/mysqld_safe –defaults-file=/etc/my.cnf
–default-character-set=latin5 –pid-file=”$mypidfile” >/dev/null 2>&1 &
Ardýndan my.cnf dosyanýzý açýn:
[mysqld] bölümüne init-connect=”SET NAMES latin5″ satýrýný ekleyin.
Ayrýca, [mysqld_safe] ve [client] bölümlerinede aþaðýdaki eklemeleri yapýn:
default-character-set=latin5
default-collation=latin5_turkish_ci
deðiþiklikleri yapýp mysql sunucunuza reset atýn ve deðiþikliklerin aktif olduðu göreceksiniz!
Not: show variables; sorgusunda çýkan system-character-set-UTF8 yazan yer kesinlikle deðiþmemektedir, bu mysqlnin 4.1.x serisiyle beraber deðiþtirilmez bir karakter seti olarak gelir.
MySQL 4.1.x ile beraber deðiþen özellikler sadece bununla sýnýrlý deðil, YEDEK ALIRKEN DÝKKAT!!!! mysqldump, phpmyadmin ve benzeri yedekleme yazýlýmlarý üzerinden alýnan yedeklerde mutlaka yedeðin karakter seti belirtilmesi gerekir! aksi takdirde yedek bozuk karakterle alýnýr. Latin5 karakter seti kullanan veri tabanlarýný yedeklerken herzaman:
Yedek alýrken:
mysqldump –default-character-set=latin5 -u veritabaný_kullanýcýadý
-p veritabanýadý > /dizin/yedek.sql
Bu þekilde alýnan yedeði yüklerken:
mysql –default-character-set=latin5 -u veritabaný_kullanýcýadý
-p veritabanýadý < /dizin/yedek.sql
böylece yedekler saðlýklý bir þekilde veri tabanýna aktarýlýr. Mümkünse phpmyadmin gibi yazýlýmlar üzerinden yedek almamaya özen gösterin.
küçük not: mysql 4.1.x serisi ile dumpta –opt ve -Q anahtarlarý varsayýlan özellikler arasýna girdiðinden, yukarýdaki komutta kullanmadýk.
Ayrýca aþaðýdaki örnek sorgularla sistemdeki türkçe karakter setleri hakkýnda bilgi alabilirsiniz;
mysql> SHOW COLLATION LIKE ‘%turk%’;
+——————-+———+—–+———+———-+———+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+——————-+———+—–+———+———-+———+
| latin5_turkish_ci | latin5 | 30 | Yes | | 0 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| ucs2_turkish_ci | ucs2 | 137 | | Yes | 8 |
+——————-+———+—–+———+———-+———+
3 rows in set (0.00 sec)
mysql> SHOW COLLATION LIKE ‘%latin5%’;
+——————-+———+—-+———+———-+———+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+——————-+———+—-+———+———-+———+
| latin5_turkish_ci | latin5 | 30 | Yes | | 0 |
| latin5_bin | latin5 | 78 | | | 0 |
+——————-+———+—-+———+———-+———+
2 rows in set (0.00 sec)
Evet böylelikle MySQL 4.1.x serisindeki karakter sorunlarýný kökten çözmüþ bulunmaktayýz, hepinize faydalý olmasý dileðiyle..
No tag for this post.

Haziran 19th, 2006 at 5.47
güzel bir yazý olmuþ.Teþekkürler…
Haziran 20th, 2006 at 11.38
Bende zokie ye teþekkür ediyorum
Kasým 10th, 2006 at 1.55
ARKADAÅžLAR MERHABA ÖNCELÝKLE YUKARDAKÝ YAZININ SAHÝBÝNE TEÅžEKKÜRLERÝMÝ ÝLETÝYORUM..
Benim bir sorum olacak daha onceden charset=windows-1254″
olarak mysql gonderdýgým verýler mysql 4.2.x gectikten sonra otomatik olarak karþýkaþtýrmalarý latin1_swedish_ci oldular ben bunu phpmyadminden duzeltip latin5_turkish_ci yapýyorum ama karakterler de ? iþareti çýkýyor eðer yeni kayýt eklersem bir problem yok ama eski kayýtlarý da nýsýl düzeltebilirim…Åžimdiden tþk.
Kasým 10th, 2006 at 2.45
Bu þekilde nasýl yaparsan yap sorun kalmaz.Yedeði bu þekilde al geri yükle.4.2.x geçtikten sonra demiþsin ama nerden geçtin eðer 4.0 ise phpmyadminde yedek alýrken seçebileceðin bi yer biliyorum
Kasým 11th, 2006 at 3.14
arkadaslar ben de de ayný sorun var durum su
Onceki sunucuda mysql 4.0 vardý ve karakter karþýlaþtýrmasý diye bir þey yoktu bizim hosting firmasý mysql yukseltmiþ ve mysql versiyonu þu an 4.1.2 olmuþ . þu an sitede karakterlerde problem gozukmuyor ama phpmyadmine gýrýp yedek alýp(baska sekýlde yedek alamýyorum) lokalde yukledýgýmde karakterler bozuluyor . suan karsýlastýrmalar latin1_swedish_ci olarak gozukuyor phpmyadmýnden bunlarý duzeltýp latin5 ama karakterler duzelmýyo lutfen yardým cok acýl Ins anlamýssýnýzdýr problemi
Eylül 4th, 2007 at 3.35
merhaba bir sorunum var
oluþan tablo ýsýmlerýnýn dil karakteriný nasýl toplucam sql sorgudan deðiþtirebiliriz
þu an hepsinin karakter yapýsý UTF8 ben latin5 olarak topluca deðiþmesini istiyorum
tesekkurler
Mart 18th, 2008 at 3.39
merhabalar.
tablomu yukarýda anlatýlan þekilde oluþturdum ve türkçe karakterler mysql’in querybrowser’inde görülebiliyor.
querybrowser’dan elle insert edince de bir sorun çýkmýyor.
ankcak, vb.net express 2008 ile yazdýðým programdan tabloya eklediðim türkçe karakterlerde sorun var. þ -> s, ý -> i þeklinde gösteriyor.
acaba ne yapmam gerek?