Merhaba herkese. Bu yazımda MySQL sorgularında sıkça ortaya çıkan bir problemden bahsetmek istiyorum sizlere.
Normal olarak sorgu içerisinde kullandığınız LIKE komutu MySQL veritabanlarında büyük küçük harf duyarlı vaziyettedir. Bu da kullanıcı tarafında istenmeyen bir durumdur. Bunu çözmenin birçok yolu var. Arama kısmından alınan verinin süzülüp query içerisine yansıtılması bunlardan biri örneğin. Ama iyi bir veritabanı yapısı developer’a her zaman en az iş yükünü doğurandır. Yani kod tarafında extra bir çalışma yapmadan bu işlemi gerçekleştirmek mümkün. Nasıl mı? Örneğin bir örnek üzerinden gidelim.
SELECT * FROM trees WHERE trees.`title` LIKE '%elm%'
Yukarıda görmüş olduğunuz sorgu MySQL 5 üzerinde sadece küçük harf duyarlı çalışır. Yani tablo üzerinde ‘Elma’ yada ‘ELMA’ varsa bunları yakalamaz.
Çözüm
SELECT * FROM trees WHERE trees.`title` COLLATE UTF8_GENERAL_CI LIKE '%elm%'
Aslında, tablo sütun tanımına COLLATE UTF8_GENERAL_CI eklerseniz, işlem otomatik olarak istediğimiz düzeyde çalışır. Tabi tablo karakter kodlamanız UTF-8 olmalıdır. Değil ise aşağıdaki sorgu yardımıyla hızlıca güncelleyebilirsiniz.
ALTER TABLE trees MODIFY COLUMN title VARCHAR(…) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI.
Not: Bu işlem tablo sütun dizinlerini yeniden oluşturacak. Bundan dolayı işlem öncesinde veritabanı yedeği almanızı tavsiye ederim.
Yöntem 2 (Bonus)
SELECT * FROM <trees> WHERE LOWER(<title>) LIKE LOWER('%<elm>%')

Teşekkür ederim