May
3

MySql Connector 6.0.3 – .Net sorunları üzerine…

logo_mysql_sun_a

Evettt… Bana ait olan inceliyorum.com adlı sitemi .net platformunda tekrardan yazılımını güncelledim. Tabi Mssql veritabanımın çok şişmesi sonucunda mysql veritabanını kullanayım dedim. Gelin görünkü yeni sistemi açalı 2 gün olmasına rağmen ha yüzüklerin efendisi kitabının serisini okumuşum ha mysql connector da çıkan promlemlerin yazısını okumuşum 😀 Anlayacağınız girmediğim site kalmadı.

İnşallah bu yazımın sizlere .net platformunda mysql kullanmak isteyenler için yararlı olacağını düşünmekteyim.

Gelelim sırayla karşıma çıkan hatalara 🙂

Sorun 1 :

error connecting: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.

Yukarıdaki hatanın en büyük sebebi açılan connectionların kapatılmadığından dolayı çıkan sorundur. Bir örnekle açıklamak istersek : Hosting firmaları genellikle size 5 connection (bağlantı) yapabilmenize olanak sağlamaktadır. Yani bilgisayarınızda çalıştığınızda bağlantı sorunu yaşamazsınız fakat sunucu üzerine geçtiğinizde kapatmadığınız bağlantıların hepsinde hata (exception)  fırlatacaktır. Onun içindirki açmış olduğunuz bağlantıları (connection) kapatmayı unutmayınız.

Benim sorunum yukarıdaki gibi değil malesef 🙂 Zaten o olsa acayip sevinecektim 🙂 bu sorun için bakmadığım forum, girmediğim site kalmadı. Zaten çoğu kişi laf kalabalığı yapmaktan öteye geçememişler. En sonunda kendimi mysql’ in forumlarına yazı yazmayı uygun gördüm. Şu saate kadar da bi ses soluk çıkmadı ama büyük bir ihtimalle connector da bir bug olduğunu söyleyebilirim. Araştırmalarım o yönde 🙂 inş bi cevap yazarlar ve bana çözüm üretirlerse bundan en büyük faydayı ben sağlayacağım 🙂

Şu anlık site çalışıyor fakat siteye aynı anda 100 kişi girdiğinde sitenin bömleyeceğini izlemekten zevk alacaklarını söyleyebilirim 😀

Sorun 2 : Türkçe karakter sorunu

Keni makinamda çalıştığımda herhangi bir karakter sorunum yoktu. Veritabanını sunuya yükledim gene herhangi bir sorun yoktu ama sunucu üzerinden çalışmaya başladığımda o dehşet anı gördüm 🙂 Bütün türkçe karakterleri bi güzel i’ yi ı, ş’ yi s’ ye vs kendiliğinden çevirmiş 🙂 Bunun çözümü aslında son derece basit yapmanız gereken sadece ConnecitonString’inize aşağıdaki kodu eklemek :

DataSource=127.0.0.1;Database=veritabanı adı;UserName=kullanıcı adı;Password=şifre;character set=utf8;

Yukarıda görüldüğü gibi “character set=utf8;” kodunu ekleyerek türkçe karakter sorunu çözülmektedir. Bu arada ben utf8 kullanmaktayım eğer size mesela latin-5 kullanıyorsanız “latin5” i yazmalısınız.

Sorun 3 : Sql sorgularında kullanılan “LIKE” ile ilgili sorun :

Illegal mix of collations (utf8_bin,NONE) and (utf8_general_ci,COERCIBLE) for operation ‘like’

Description: ;An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: MySql.Data.MySqlClient.MySqlException: Illegal mix of collations (utf8_bin,NONE) and (utf8_general_ci,COERCIBLE) for operation ‘like’

Karşıma bugün başka bir sorun daha çıktı 🙂 Sorun sitemde kullandığım arama kısmında kullanmış olduğum “LIKE” sorgusunun patlaması. Yukarıdanda anlayacağınız üzere benim karakter setim utf8_general_ci ‘dir. Tabi ben connection stringimde karakter setimi utf8 yapınca direk LIKE sorgularımda uıtf8_bin collectionunu kullanıyormuş. Onun için sizde veritabanınızın karkater setini utf8_bin yapmanız gerekmektedir. (NOT : tablo ve sütunlarıda karakterlerinide aynı şekilde düzeltmeniz gerekmektedir) Karakter setinizi düzelttiğinizde herhangi bir sorun olmayakcaktır. Gene siz latin5 falan kullanıyorsanız karakter setinizi latin5_bin olarak ayarlamanız  gerekmektedir.

Bunda da gene bazı problemlerle karşıalacaksınız şöyleki : Eğer siz bütün alanları text yapmaz iseniz aramada istenilen sonuçları alamayacaksınız. Örnek olarak text yaptığınız alanda veriler şuna benzer biçimde görünecektir : x34sdc ama vchar olarak tanımladığınız alan ise : Nokia … 🙂 Birisi binary diğeri bildiğimiz karakaterler kümesi olacaktır. O sebebledirki arama sonuçlarında istenilen verileri getiremeyeceksiniz. Onun için bütün string alanlarını text yapmak zorunda kalacaksınız.

Daha başka sorunlarla karşılasırsam sizleri bilgilendirmeye çalışcam. Ama şunu söliyim bu gidişle MsSql’ e geçiş yapmak zorunda kalıcam…

Tarih : 05/05/2009

Sonuç : MySql den MsSql’ e geçiş yaptım… :/

Yorum Yapın

 

Twitter'dan Takip Et! Twitter'dan Takip Et!

Etiketler

Son Yazılar

Son Yorumlar

Haftanın Özlü Sözü

Akıllı bir adam yalnız kendi tecrübelerinden, çok akıllı bir adam başkalarının da tecrübelerinden yararlanır. (Çin Atasözü)

Bağlantılar

Arşivler