Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: WHERE BINARY - So sánh chuỗi phân biệt chữ hoa/thường (case-sensitive)

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).