Veritabanı Karakter Kodlaması Ayarı (UTF-8)
Configuring Database Character Encoding
Geçenlerde üzerinde çalıştığım bir projede web sayfasından FORM ile gönderdiğim verilerin veritabanında türkçe karakterlerinin bozuk çıktığını farkettim. Bunu çözmek için çok çeşitli yollar denedim ve sonunda aşağıda anlatacağım çözüm yolunu buldum.
Web Sayfasındaki formlardan database'e veri kaydederken sık sık encoding problemleriyle karşılaşılır. Bu sorunları aşmak için database tarafındaki iki yerde "character-encoding" ayarlarının yapılması gerekir.
1-) Örneğin verileri UTF-8 encodinginde tutmak istiyorsak öncelikle veritabanını UTF-8 encodingi ile oluşturmalı ve tablo ve alanlarda da aynı encodinge sadık kalmalıyız.
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin;
NOT: Bunun dışında veritabanının encodingini de UTF-8 yapmalı (default-character-set=utf8) ve tabloları ve onların karakter tutan alanlarını da UTF-8 encodingine ayarlamalısınız. (ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;)
NOT: Bunun dışında veritabanının encodingini de UTF-8 yapmalı (default-character-set=utf8) ve tabloları ve onların karakter tutan alanlarını da UTF-8 encodingine ayarlamalısınız. (ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;)
2-) İkincisi veritabanına bağlanırken de encodingi belirtmemiz gerekmekte. Örneğin veritabanı bağlantısını (connection string) aşağıdaki gibi tanımlamalıyız:
jdbc:mysql://hostname:port/database?autoReconnect=true&useUnicode=true&characterEncoding=utf8
NOT: XML dosyasında bağlantı tümcesi tutulacaksa "&" karakterini "&" olarak yazmaya dikkat etmeliyiz.
NOT: XML dosyasında bağlantı tümcesi tutulacaksa "&" karakterini "&" olarak yazmaya dikkat etmeliyiz.
3-) Ayrıca TOMCAT'in server.xml dosyasından URI encoding ayarı da yapmanız gerekli:
<
Connector
port
=
"8080"
URIEncoding
=
"UTF-8"
/>
Hiç yorum yok:
Yorum Gönder