Bildiğiniz gibi MySQL veritabanında MSSQL’de olduğu gibi CS ve AIkullanımları yok. Bunun yerine collation verileri hep CI yani Case Insensitive olarak kullanılıyor. Bu durumda büyük/küçük harf duyarlı bir sorgu yapmak istediğimiz zaman devreye BINARY giriyor.

Örneğin basit bir kullanıcı girişi sorgusunu aşağıdaki gibi hepimiz kullanıyoruz;

SELECT * FROM users WHERE user_id = 'canyildiz' AND password = 'hashed_pass';

Ancak biz canyildiz ve CanYildiz kullanıcı adları ayrı ayrı kullanılabilsin istersek bunu büyük/küçük harf duyarlı (case-sensitive) yazabiliyor olmamız gerekiyor. Bunu da aşağıdaki gibi yazıyoruz:

SELECT * FROM users WHERE user_id = BINARY 'canyildiz' AND password = 'hashed_pass';

Bu durumda artık sadece user_idalanı tam olarak canyildiz olan kullanıcı satırı ile çalışır olduk.

Burada çok dikkat edilmesi gereken bir konu var; bazı yerlerde  BINARY kullanımı alan adının önünde kullanılarak örneklenmiş. Yani aşağıdaki gibi bir sorgu yazılmış;

SELECT * FROM users WHERE BINARY user_id = 'canyildiz' AND password = 'hashed_pass';

Bu şekilde kullanıldığında ciddi oranda performans sorunu yaratıyor. Ben her iki sorguyu da içinde ~1.2M kayıt olan bir tabloda denedim ve şu şekilde sonuç aldım:

SELECT * FROM users WHERE BINARY user_id = 'canyildiz' AND user_password = 'hashed_pass';
/* Affected rows: 0  Found rows: 1  Duration for 1 query: 2.822 sec. */


SELECT * FROM users WHERE user_id = BINARY 'canyildiz' AND user_password = 'hashed_pass';
/* Affected rows: 0  Found rows: 1  Duration for 1 query: 0.021 sec. */

Sorguları EXPLAIN ile incelediğimde BINARY user_id şeklinde olan kullanımda index’lerin kullanılmadığını gördüm