Mặc định MySQL so sánh chuỗi không phân biệt chữ hoa/thường (case-insensitive). Dùng từ khóa BINARY sau WHERE hoặc trong định nghĩa cột để bật so sánh chính xác (case-sensitive).
Ví dụ so sánh trực tiếp
Case 1: Không dùng BINARY (case-insensitive)
mysql> SELECT 'joHN' = 'JOHN' AS KetQua;
+--------+ | KetQua | +--------+ | 1 | -- TRUE (sai về mặt logic nếu cần chính xác) +--------+
Case 2: Dùng BINARY (case-sensitive)
mysql> SELECT BINARY 'joHN' = 'JOHN' AS KetQua;
+--------+ | KetQua | +--------+ | 0 | -- FALSE (đúng: joHN ≠ JOHN) +--------+
mysql> SELECT BINARY 'JOHN' = 'JOHN' AS KetQua;
+--------+ | KetQua | +--------+ | 1 | -- TRUE +--------+
Áp dụng BINARY cho cột khi tạo bảng
mysql> CREATE TABLE TuKhoaNhiPhan (
-> Id INT NOT NULL AUTO_INCREMENT,
-> Ten VARCHAR(10) BINARY, -- cột này sẽ case-sensitive
-> PRIMARY KEY(Id)
-> );
Chèn các biến thể của "Bob":
mysql> INSERT INTO TuKhoaNhiPhan(Ten) VALUES
-> ('bOB'), ('bob'), ('BOB'), ('Bob'), ('bOb'), ('boB');
Truy vấn chính xác "Bob"
mysql> SELECT * FROM TuKhoaNhiPhan WHERE Ten = 'Bob';
Kết quả (chỉ 1 bản ghi khớp hoàn toàn):
+----+------+ | Id | Ten | +----+------+ | 4 | Bob | +----+------+
Lưu ý: BINARY cũng làm index hoạt động khác (so sánh byte-by-byte). Dùng khi cần độ chính xác cao (mật mã, mã code, username).