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

Cách tìm kiếm chuỗi chính xác (phân biệt chữ hoa/thường) trong MySQL

Để 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_bin thay 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).