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

Tại sao từ khóa BINARY được dùng với toán tử REGEXP trong MySQL?

Sử dụng từ khóa BINARY để buộc REGEXP so khớp chuỗi như một chuỗi nhị phân (phân biệt chữ hoa/thường). Chúng ta sẽ thấy sự khác biệt ở ví dụ dưới đây.

Tạo bảng demo

mysql> create table DemoTable (
    -> Name varchar(100)
    -> );
Query OK, 0 rows affected (0.46 sec)

Chèn dữ liệu với các trường hợp chữ hoa/thường khác nhau

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('JOHN');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('john');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('JOhn');
Query OK, 1 row affected (0.17 sec)

Hiển thị tất cả bản ghi

mysql> select * from DemoTable;

Kết quả

+------+
| Name |
+------+
| John |
| JOHN |
| john |
| JOhn |
+------+
4 rows in set (0.00 sec)

So sánh REGEXP thường và REGEXP BINARY

mysql> select Name REGEXP 'JOHN' AS KetQuaKhongBinary, 
       Name REGEXP BINARY 'JOHN' AS KetQuaCoBinary 
       from DemoTable;

Kết quả

+---------------------+------------------+
| KetQuaKhongBinary   | KetQuaCoBinary   |
+---------------------+------------------+
| 1                   | 0                |
| 1                   | 1                |
| 1                   | 0                |
| 1                   | 0                |
+---------------------+------------------+
4 rows in set (0.04 sec)

Giải thích:

  • Không dùng BINARY: REGEXP mặc định không phân biệt chữ hoa/thường, nên tất cả 4 hàng đều khớp (trả về 1).
  • Có BINARY: Chỉ hàng có chính xác 'JOHN' (viết hoa toàn bộ) mới khớp (trả về 1).

Khi nào dùng BINARY: Khi cần tìm kiếm chính xác về mặt chữ hoa/thường, ví dụ: mã sản phẩm, mật khẩu, mã code phân biệt hoa/thường.