Hata Çözümleri

Android MySQL Türkçe Karakter Sorununun Çözümü

Merhaba. Üzerinde uğraştığım bir Android projesinde Php kullanarak uzak sunucudaki bir mysql veritabanına kayıt atarken ve kayıt çekerken Türkçe karakterleri, soru işareti (?) ile kaydettiğini gördüm. Ayrıca sorgulama yaparken de mevcutta kayıt olduğu halde sorgu sonucunda kayıt dönmediğini ve hataya takıldığını farkettim.

Yaklaşık 2 gün boyunca araştırdım ve birçok farklı kombinasyon denememe rağmen sonuç elde edemedim. Sonunda bir blogda çözüm buldum, unutmadan not etmek ve başkalarına da yardımcı olmak için bu yazıyı yazma ihtiyacı hissettim. Her sitede farklı çözümler mevcut fakat ben ilk çözümüm bu olduğu için daha fazla kurcalamak istemedim.

Adımlar

1- İlk olarak tüm Php dosyalarımızı NotePad++ programında açıyoruz ve üst menüden Kodlama -> “BOM Olmadan UTF8 Olarak Kodla(UTF-8 Without BOM)” seçeneğini seçip dosyayı tekrar kaydederek tüm Php dosyalarını host veya sunucumuza tekrar atıyoruz. Siz tüm Php dosyaları için bunu yapmalısınız. Özellikle sorgularınızın olduğu Php dosyasında.

2 – Hangi Php dosyasında bağlantı oluşturuyorsak (ben db_connect.php dosyasında yaptım) o dosyayı açıp aşağıdaki kodu ekliyoruz ve bu dosyayı tekrar uzak sunucumuza atıyoruz.

$con->set_charset("utf8");

Bağlantı oluşturduğumuz satırın hemen altına ekleyelim.

3 – Tüm veritabanı, tablo ve kolonlarımızı utf8_general_ci karakter kodlamasında oluşturuyoruz. Tablomuz bu formatta oluşturulursa kolonları da bu formatta oluyor.

Eğer var olan bir veritabanınız veya tablonuz varsa bunun character encoding‘ini aşağıdaki sorguyla değiştirebilirsiniz.

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

İster veritabanını silip tekrar oluşturun isterseniz hem veritabanı hem tablonuzu üstteki sorguyla güncelleyin. Bu işlemden sonra kolonlarınıza tek tek bakmanızı öneririm. Kolonların Enconding’inin de utf8_general_ci olduğundan emin olun. Aşağıda veritabanı, tablo ve kolon için encoding formatının son şeklini gösteriyorum.

Veritabanı encoding:

Tablo encoding:

Kolon encoding:

4 – Son olarak Android kodunuzdan, Php dosyasını çağırma işlemini POST  tekniği ile yapıyorsanız “UTF-8” parametresini Android kodunuza aşağıdaki gibi ekleyiniz.

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));

Eğer GET  tekniğini kullanıyorsanız :

DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");

kodunu ekleyiniz.

Eğer Php ile değil de başka bir formatla bağlanıyorsanız 2.adımdaki gibi CHARACTER SET değeri set etmelisiniz. Php’de böyleydi, her dilde farklıdır. Eğer Android değil de başka bir platformdan bağlanıyorsanız da kodunuzun içerisinde ilgili Character Encoding belirleme kodunu kullanmalısınız. Android için bu 4.adımda yapıldı.

Yardımcı olabildiysem ne mutlu. Sorunuz olursa ya da bu şekilde sorunu düzeltirseniz yorumda belirtmenizi isterim.

Mehmet Kirazlı

İstanbul Eyüp'te ikamet ediyorum. Giresun Alucra'lıyım. Bilgisayar Mühendisliği bölümünden 2013 yılında mezun oldum. "Yeni Başlayanlar için Java 8" kitabının yazarıyım. Şu anda özel bir firmada Mobil Yazılım Geliştirme Uzmanı olarak çalışıyorum.

Son Gönderiler

Android Firebase Event (not set) Hatası Çözümü

Merhaba. Firebase Events'e istatistik attığınızda not set şeklinde bir değer görüyorsanız olası çözümünü göstereceğim. (daha&helliip;) Daha Fazla Oku

% gün önce

Namaz Vakitleri Uygulaması Yayında

Merhaba. Android cihazlar için hazırladığım Namaz Vakitleri uygulaması ile 200'e yakın ülkede tüm namaz-ezan vakitlerini… Daha Fazla Oku

% gün önce

Kaza Namazı ve Oruç Takip Uygulaması

Selamlar. İnsanlar için faydalı olması amacıyla geliştirdiğim Kaza Namazı ve Oruç Takip Uygulamasını sizlere tanıtmak… Daha Fazla Oku

% gün önce

Android Volley Kullanımı ve JSON Parse İşlemleri

Volley, Android uygulamalarımızda kullandığımız AsyncTask'ın alternatifi olarak ortaya çıkarılan, Google I/O 2013 sunumunda duyurulan bir… Daha Fazla Oku

% gün önce

Android ButterKnife Kütüphanesi Kullanımı

Merhaba. Bu yazımda Android platformunda kullanıma sunulan, bazı kod bloklarını basitleştiren ve okunabilirliği arttıran ButterKnife… Daha Fazla Oku

% gün önce

Admob TikTok Reklamları Engelleme

Merhaba. Bu yazımda artık baş belası olmuş TikTok reklamlarını, Android uygulamalarımızdaki Admob reklamlarından nasıl kaldıracağımızı… Daha Fazla Oku

% gün önce