Để tìm kiếm chuỗi chính xác trong MySQL (phân biệt chữ hoa/thường - case sensitive), bạn sử dụng từ khóa BINARY trong mệnh đề WHERE.
Cú pháp
SELECT * FROM ten_bang WHERE BINARY ten_cot = 'chuoi_can_tim';
Ví dụ minh họa
1. Tạo bảng kiểm thử
CREATE TABLE ExactSearch (
Id INT NOT NULL AUTO_INCREMENT,
UserId VARCHAR(10),
UserName VARCHAR(20),
PRIMARY KEY(Id)
);
2. Chèn dữ liệu mẫu
INSERT INTO ExactSearch(UserId, UserName) VALUES('USER12', 'John');
INSERT INTO ExactSearch(UserId, UserName) VALUES('12USER', 'Carol');
INSERT INTO ExactSearch(UserId, UserName) VALUES('USER123', 'Bob');
INSERT INTO ExactSearch(UserId, UserName) VALUES('USER231', 'Sam');
3. Xem toàn bộ dữ liệu
SELECT * FROM ExactSearch;
Kết quả:
+----+---------+----------+
| Id | UserId | UserName |
+----+---------+----------+
| 1 | USER12 | John |
| 2 | 12USER | Carol |
| 3 | USER123 | Bob |
| 4 | USER231 | Sam |
+----+---------+----------+
4. Tìm kiếm chính xác chuỗi 'USER123'
SELECT * FROM ExactSearch WHERE BINARY UserId = 'USER123';
Kết quả:
+----+---------+----------+
| Id | UserId | UserName |
+----+---------+----------+
| 3 | USER123 | Bob |
+----+---------+----------+
Giải thích
- Mặc định MySQL so sánh chuỗi không phân biệt chữ hoa/thường (case-insensitive) với collation *_ci
- Từ khóa
BINARYép buộc so sánh theo mã nhị phân (binary comparison), do đó phân biệt 'USER123' và 'user123' - Có thể dùng
COLLATE utf8mb4_binthay thế:WHERE UserId COLLATE utf8mb4_bin = 'USER123'
Cách khác: Sử dụng STRCMP
SELECT * FROM ExactSearch WHERE STRCMP(UserId, 'USER123') = 0;
STRCMP trả về 0 nếu hai chuỗi giống hệt nhau (phân biệt chữ hoa/thường).