mysql maria

mysql soundexle ilgili bir problemim var kendisi biraz fazla sonuç getiriyor tabi buda doğal olarak sözlüğümüzün tavsiye alanını gereksiz uzatıyor. okudum okudum double metaphone algoritması 2000 yılında icad edilmiş ve herkezin dediği daha sağlıklı olduğu neyse aranıom bunun mysql 5.0 da uygulanışı varmı diye gezinirken gördüm not edem dedim.

myisam a cila çekiyor mysql. 5.1 versiyonuna sokmuşlar ama henüz ürün hedefi olarak belli bir yolu yok. neyse myisam dan farkı failsafe olmasıymış hadi bakalım mariamaria 🙂

bundan sonra daha sık yazıcam ya blogumun teması süpper oldu 😀 içimden hep yazasım gelio…..

mysql select türkçe where aynı

google da bu keywordlerle arama yaptım ve sonuç bulamadım. ondan bu yazıyı yazim dedim. problemim “select * from table1 where col1=’AC'” ve “select * from table1 where col1=’AÇ'” sql cümlelerinin aynı sonucu getirmesiydi. ç=c gibi algılıyordu sorgum. bu durum aslında çok kötü değil sonuçda gereğinden fazla sonuç geliyor ama nokta atışı yapmamız gereken yerlerde fazlalık çıkarıyordu. başladım bakınmaya bu keywordlerden bi hayır yok habire mysql de türkçe problemi çeken forum postları çıkdı karşıma.

bu arada demeden geçemicem türkçe forumlar bildiğimiz arama spamı kaynıyor. seo ayarı verilmiş forumlar habire replike içerikden aynı sorular aynı cevaplarda oluşuyor. allahdan noscript kullanıyorumda reklam yığınıyla karşı karşıya kalmıyordum. kıl oluyorum hep aynı şeyleri görmekden. neyse bu birazda google amcamın hatası

durum mysqlde şöyle oluyor. eğer kolonunuzu “utf8_general_ci” ise bu istediğin dilde o kolona yaz ve büyük küçük harf duyarsız kullan demek yani AC ve ac aramalarımda aynı sonuç geliyor demek. ve aynı zamanda anlaşıldıki dile bakma ç = c gibide davran demek oluyormuş o kolonumu “utf8_turkish_ci” yaptım ve c!=ç oldu. yani türkçe duyarlı case insensitive kolon. ci sanırım case insensitive demek.

sanırım biraz performansı düştü sitemin ondan emin değilim sonuçda shared hostingde bir ingilizce sözlük.

Mysql ve garip hatası: Got an error reading communication packets

sabahdan beri mysql de bi hatalardır gidiyor. ve bu hatalar herhangi bir sebep olmaksızın olduğundan çözemiyordum evvela logları açtım. asp.net mysql e bağlanamıyorum hatası veriodu sadece mysql in logları açınca olay aydınladı.

Exception information:
Exception type: MySqlException
Exception message: Unable to connect to any of the specified MySQL hosts.

bu hata hiç birşey anlatmıyor çünkü zaten normalde çalırşırken ara ara verilen bir hataydı bu. neyse mysql in loglar şu şekil açılıyor.

log-slow-queries
log-error

bu iki satırı my.ini dosyasında [mysqld] altında bi yere yazın ve mysql i restart edin. sonuçda mysql administrator un server logs bölümünde manalı mesajlar görmeye başlayacaksınız. neyse yakaladığım hata da başlıkda geçtiği gibi şu satırdan onlarcaydı

081102 7:29:35 [Warning] Aborted connection 15517 to db: ‘motosiklet’ user: ‘motor’ host: ‘localhost’ (Got an error reading communication packets)

bu hata çıktığı zaman hakkaten asp.net hosta bağlanamayıp hata sayfasına gidiyordu. altından girdim üstünden çıktım sistem windows ama linux dede bu tip hatalar ile karşılaşanlar çok. compression denedim.

http://dev.mysql.com/doc/mysql/en/communication-errors.html 

linki heryerde çıkıyor karşınıza bunu okudum max allow packet size ı ile oynadım. yok bi türlü sağlıklı bi çözüm bualamadım bu hata hep var. en son name pipe ile bağlantı kurim lan yeter bu TCP/IP dedim denedim ve vala. hata hala var ama site çakılmıyor 🙂 bakalım ne kadar dayanır. sıkıldım bu dengesiz hatadan bilen varsa sağlıklı yolunu söylesin.

Mysql de null problemi

şöyle bir durumumuz var. table1 deki field1 i bir artırıp bi kaç satır insert etmek istiyoruz ve “select field1+1 from table1” dediğimizde field1 herhangi bir sebepten dolayı null olduğu için selectimizin sonucu null geliyor.

bu durumda ne yaparız. sonuç basit “select ifnull(field1,1)+1 from table1” dediğimizde field1 olursa 1 değilse kendisi gelir ve 1 artırılıp istenen değer alır. bu problemle karşılaştığımda biraz uraştırdı buda ayrı bir çözüm ki benim kullandığım bu çünkü durumu asıl kurtaran bu oldu siparis _id sini bir artırmam gerekiodu ve bu sipariş id si en büyük sipariş id si olması gerekiodu.

“SELECT ifnull(max(siparis_id)+1,1) from siparisler where user_id=?user_id;”

bu sayede kullanıcının en son verdiği sipariş id si bir artırılıp yeni sipariş id si olarak kullanılır oldu.

Godaddy Mysql Asp.Net SqlDataSource

lokalde geliştiripde server a atınca çalışan teknoloji istiyorum. ne dil kullanırsanız ne ortam olursa olsun ya versiyonu tutmaz ordan yatar ya konfigurasyonu farklıdır yada manyakdır çalışmaz 🙂 misal godaddy de bazı yerlerde mod_rewrite çalışır aynı makinede bazı yerlerde çalışmaz.

neyse mysql kullanıyorum bir uygulamada lokalde gridview ve sqldatasourcu çalışır duruma getirmişim update delete falan mis gibi çalışıyor attım hosta hata aynen:

Unable to find the requested .Net Framework Data Provider. It may not be installed.
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: System.ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

sebep machine.config de tanımlı olmayan mysql.data.dll imizin trust meseleleri çekip çalışamaması. bide dbfactory ile ilgili konuları var ama o konuları anlamadım. neyse bu gibi bir durum nasıl çözülür.

web.config’e gereken satırlar eklenir:
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider"
invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.1.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
version numarasından çatlıyabillir kullandığınız dll in versiyonu ile değiştirin. ve bir mutlu son daha sqldatasource gridview ve mysql tatlı tatlı çalışmaya başlar o hatada kaybolur. efendim gökden 3 elma düşmüş …………….

sözlük ve tavsiye etme işlemi

bi kaç ay önce bir tercüman arkadaşla bir proje yapalım dedik benim bir sitenin içeriğine ayıracak zamanım yok ama projeler arası değişik kod görmek kafamı dinlendiriyor. sonra karar verdik bir sözlük yapalım sonuçda zargan seslisozluk falan var benim bildiğim çok yok. dedim bende içerik gireceksen yapalım. sonra bana bi mdb yolladı o başlangıç noktamız oldu access her ne kadar kıl da olsa 2 ay güzel çalışdı artık yeni özelliklere ihtiyacımız vardı misal başlıkda belirtildiği gibi yazım hatası falan yapıldığında ses olarak yakın olan kelimeleri tavsiye etmek gibi.

bunu fatih ilk söyledi ben bi korkdum sonuçda daha önce hiç düşünmediğim bilmediğim bi alandı. bu konu aslında spell checkerların içinde geçermiş. ünlü bir algorithma metaphone önce bunu nasıl uygulasam diye bakarken birde ne görim meğersem eski dost mysqlde bu algoritmayla olmasada bu işi gören bir fonksiyon var imiş soundex deneme yapmam gerekdi olaydan pek bişey anlamadım ama anladığım şuydu bu işi db ye yıkarsam karlı çıkarım. bu çok klasikdir eğer herhangi bir işlemi db ye yıkarsanız daha hızlı çözersiniz ve çalışır.

mdb yi aldım mysql e sokacam mysql migration tool var biraz nazlandı utf8 le bi şekil gömçürdüm sonuçda db vardı elimde artık çalışmalıydı ama bir karakter problemi varki kol kadar saçma sapan işler dönüo dedim html den kaynaklanıyordur bu cins karakteri browser gösteremiyor ama bilakis mesele tamamen mysql migration tool un dandikliğiymiş. tabii bunu çözmem saatler aldı hostinge db yi kopyalamak ayrı bir dert shared hosting de yani ucuz işde mysql direk bağlantı vermiolar tabii güvenlik amaçlı. phpmyadmin de 2mb dan büyük dosya almam diye ayarlanmışki sadece sql dosyasıda alabilio epey uzun sürdü velhasılı sonuç. navicat sağlam bir araç aynı şekil utf8 alt yapıya onla insert yaptığımda karakter problemleri çözüldü.

soundex konusuna gelince şu benzeri bir sql istediğimizi yakalıyor.

select kelime from kelimeler where soundex(‘aranan ve bulunamamış kelime’)=soundex(kelime)

ses olarak db de aranan kelimeye yakın olan bütün kelimeleri diziyor.
örnek sayfanın ortasına dizio yiğit mysql 🙂

bu işlem diğer dblerdede mevcut sanırım bi ara onlarıda test etsem neşeli olur. yoksa bu garip fonksiyonları kullanacak yer yok.

sakin sakin 202 ye bakıyorken

202 bizim serverlardan biri. oc4j nin debug windowunda bi kaç exception gördüm nolaki dedimdi bakdım muyap iletişimi kuran asp.net uygulaması patlayık verdiği hatada pool um doldu bilmemne.

epey bi uraştırdıkdan sonra çözüm olarak şunu buldumki .net connector un pooling yönetimi mal sanırım adam açıo connectionu ve bi daha vermi başkasına. onlarda öyle askıda kalıyor. poolingi kapadım ve muradıma erdim artık connection öyle idle kalmıo çat diye kapanıyor.

http://dev.mysql.com/doc/refman/5.0/en/
connector-net-examples-mysqlconnection.html#23.2.3.3.15. ConnectionString

Connection Lifetime
Pooling

bu başlıkları dikkatli okuyun.

artık birazcık bekleterek çalışacak ama oda ms değerinde olduğu için kabul edilebilir.