Php+mysql Tabanl? Site Tasar?mlar? Haz?rlayan Yeni Arkada?lar?n En Büyük Problemleridir, Mysql 4 Üzerindeki Karakter Problemleri.bu Sadece Mysql 4 Üzerinde Olu?an Bir?ey. Yani Mysql 4'ler Üstünde Karakter Kodlama Seçenekleri Söz Konusu. Ayr?ca Türkçe Karakter ?çeren S?ralamalardada Sorunlar Ç?kmaktad?r.
Yeni bir veritaban? yaratt???n?zda, Kar??la?t?rma(Collation) de?erinin latin1_general_ci, latin1_swedish_ci v.b. oldu?unu göreceksiniz. Siz bu veritaban? üstüne tablolar?n?z? yarat?r ve kullan?ma haz?r hale getirirsiniz. Fakat her tablo için varsay?lan kar??la?t?rma de?eri, yine veritaban?nda kullan?lan de?er olacakt?r.
Asl?nda kar??la?t?rma de?eri, tablolar?n dil kodlamas?d?r. Ve sadece metin içerikli sütunlarda görünmektedir. Bunun anlam?, o sütunda seçmi? oldu?unuz dilin kullan?laca?? diyebilirim. Standart olarak swedish geçer. Sizlerin bu sütunlara yollayaca??n?z kay?tlar ise, isveçce dili göz önünde bulundurularak girilir. Bundan da ?u ç?kar: isveçcede Türkçe karakter yer almaz, bu yüzden Türkçe karakterler yerine ? v.b. karakter bulacaks?n?z. San?r?m genel olarak anlatabildim bu k?sm?.
Çözüm Yolu
Yeni bir veritaban? yarat?rken, kar??la?t?rma de?erini daima latin5_turkish_ci seçin. Dilimize ait karakter kodu budur. Bu ?ekilde veritaban?n? yarat?rsan?z, tablolar için yapman?z gereken fazladan bir?ey yok. Tablo yarat?rken, metin de?erli sütunlar?n kar??la?t?rma de?erlerini bo? b?rakabilir yada yine latin5_turkish_ci seçebilirsiniz.
mysql_query("CREATE DATABASE `veritabanimiz` DEFAULT CHARACTER SET latin5 COLLATE latin5_turkish_ci");
S?ra php kodlar?n?z? yazmaya geldi?inde, tabi ki tablonuzun kar??la?t?rma de?erini sql dilinde belirtmelisiniz. Bunun için a?a??da verece?im kodu kullanacaks?n?z. Bunu veritaban? ba?lant?s? kurup, ilgili veritaban?n? seçti?iniz sat?r?n bir alt sat?rana girebilirsiniz.
mysql_query("SET NAMES 'latin5'");
Bu kodumuz tüm sorgularda, kar??la?t?rma de?erinin latin5 olaca??n? söyler. Böylelikte girece?iniz Türkçe karakterler sorunsuz ?ekilde tablolara yaz?lacakt?r.
Mysql 4 üstünde Türkçe karakter hatas?n? bu ?ekilde çözebilirsiniz. Ayr?ca benzeri uygumalay?, haz?r içerik yönetim kodlamalar? üstüne de uygulayabilirsiniz.
Bir ba?ka yöntem ise MySQL'i UTF-8 uyumlu olarak kurmak.
Unicode karakterleri kullanmak üzere "install" edilen MySQL üzerinde, yine unicode de?erler alan tablolarda s?ralama da unicode karakter s?ralamas?na göre yap?l?yor. Yani Türkçe karakterler olmas? gereken s?ras?yla yans?t?labiliyor.
Kurulurken "unicode" karakterler seçilmemi? ise, bunu sonradan de?i?tirme imkan? var m? bilmiyorum. Ancak olsa dahi böyle bir de?i?im s?k?nt? yaratacakt?r. Daha önceden tan?mlanm?? olan tablolardaki türkçe karakterler bozulacak oldu?undan dolay? ciddi problemler olu?turabilir.
utf-8 de harfleri türkçe s?ralamaz; zira ? s'den sonra gelmez utf-8'de, z'den bir hayli ilerdedir. s?ralama yaparken karakterlerin byte de?erleri önem ta??r haliyle.
$cnn = mysql_pconnect($hostname_cnn, $username_cnn, $password_cnn) or die(mysql_error());
mysql_query("SET NAMES 'latin5'");
mysql_query("SET character_set_connection = 'latin5'");
mysql_query("SET character_set_client = 'latin5'");
mysql_query("SET character_set_results = 'latin5'");
Yeni bir veritaban? yaratt???n?zda, Kar??la?t?rma(Collation) de?erinin latin1_general_ci, latin1_swedish_ci v.b. oldu?unu göreceksiniz. Siz bu veritaban? üstüne tablolar?n?z? yarat?r ve kullan?ma haz?r hale getirirsiniz. Fakat her tablo için varsay?lan kar??la?t?rma de?eri, yine veritaban?nda kullan?lan de?er olacakt?r.
Asl?nda kar??la?t?rma de?eri, tablolar?n dil kodlamas?d?r. Ve sadece metin içerikli sütunlarda görünmektedir. Bunun anlam?, o sütunda seçmi? oldu?unuz dilin kullan?laca?? diyebilirim. Standart olarak swedish geçer. Sizlerin bu sütunlara yollayaca??n?z kay?tlar ise, isveçce dili göz önünde bulundurularak girilir. Bundan da ?u ç?kar: isveçcede Türkçe karakter yer almaz, bu yüzden Türkçe karakterler yerine ? v.b. karakter bulacaks?n?z. San?r?m genel olarak anlatabildim bu k?sm?.
Çözüm Yolu
Yeni bir veritaban? yarat?rken, kar??la?t?rma de?erini daima latin5_turkish_ci seçin. Dilimize ait karakter kodu budur. Bu ?ekilde veritaban?n? yarat?rsan?z, tablolar için yapman?z gereken fazladan bir?ey yok. Tablo yarat?rken, metin de?erli sütunlar?n kar??la?t?rma de?erlerini bo? b?rakabilir yada yine latin5_turkish_ci seçebilirsiniz.
mysql_query("CREATE DATABASE `veritabanimiz` DEFAULT CHARACTER SET latin5 COLLATE latin5_turkish_ci");
S?ra php kodlar?n?z? yazmaya geldi?inde, tabi ki tablonuzun kar??la?t?rma de?erini sql dilinde belirtmelisiniz. Bunun için a?a??da verece?im kodu kullanacaks?n?z. Bunu veritaban? ba?lant?s? kurup, ilgili veritaban?n? seçti?iniz sat?r?n bir alt sat?rana girebilirsiniz.
mysql_query("SET NAMES 'latin5'");
Bu kodumuz tüm sorgularda, kar??la?t?rma de?erinin latin5 olaca??n? söyler. Böylelikte girece?iniz Türkçe karakterler sorunsuz ?ekilde tablolara yaz?lacakt?r.
Mysql 4 üstünde Türkçe karakter hatas?n? bu ?ekilde çözebilirsiniz. Ayr?ca benzeri uygumalay?, haz?r içerik yönetim kodlamalar? üstüne de uygulayabilirsiniz.
Bir ba?ka yöntem ise MySQL'i UTF-8 uyumlu olarak kurmak.
Unicode karakterleri kullanmak üzere "install" edilen MySQL üzerinde, yine unicode de?erler alan tablolarda s?ralama da unicode karakter s?ralamas?na göre yap?l?yor. Yani Türkçe karakterler olmas? gereken s?ras?yla yans?t?labiliyor.
Kurulurken "unicode" karakterler seçilmemi? ise, bunu sonradan de?i?tirme imkan? var m? bilmiyorum. Ancak olsa dahi böyle bir de?i?im s?k?nt? yaratacakt?r. Daha önceden tan?mlanm?? olan tablolardaki türkçe karakterler bozulacak oldu?undan dolay? ciddi problemler olu?turabilir.
utf-8 de harfleri türkçe s?ralamaz; zira ? s'den sonra gelmez utf-8'de, z'den bir hayli ilerdedir. s?ralama yaparken karakterlerin byte de?erleri önem ta??r haliyle.
$cnn = mysql_pconnect($hostname_cnn, $username_cnn, $password_cnn) or die(mysql_error());
mysql_query("SET NAMES 'latin5'");
mysql_query("SET character_set_connection = 'latin5'");
mysql_query("SET character_set_client = 'latin5'");
mysql_query("SET character_set_results = 'latin5'");