Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ทำไมต้องใช้คีย์เวิร์ด BINARY กับ REGEXP ใน MySQL

ใช้คีย์เวิร์ด BINARY เพื่อบังคับให้ REGEXP จับคู่สตริงเป็นสตริงแบบไบนารี (case-sensitive) มาดูความแตกต่างกันครับ

สร้างตารางตัวอย่าง

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

เพิ่มข้อมูลตัวอย่าง (ชื่อที่มีตัวพิมพ์เล็ก-ใหญ่ต่างกัน)

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)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;

ผลลัพธ์

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

คำสั่งเปรียบเทียบ REGEXP ธรรมดา กับ REGEXP BINARY

mysql> select Name REGEXP 'JOHN' AS ResultWithoutBinary,
    Name REGEXP BINARY 'JOHN' AS ResultWithBinary 
from DemoTable;

ผลลัพธ์

+---------------------+------------------+
| ResultWithoutBinary | ResultWithBinary |
+---------------------+------------------+
| 1                   | 0                |
| 1                   | 1                |
| 1                   | 0                |
| 1                   | 0                |
+---------------------+------------------+
4 rows in set (0.04 sec)

สรุป: REGEXP ธรรมดาไม่สนใจตัวพิมพ์เล็ก-ใหญ่ (case-insensitive) จับคู่ได้ทุกแถว แต่ REGEXP BINARY จับคู่เฉพาะ 'JOHN' ที่เป็นตัวพิมพ์ใหญ่ทั้งหมดเท่านั้น