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

MySQL: ค้นหาค่าสตริงที่ตรงกันแม่นยำ (Case-sensitive) ด้วย COLLATE

การค้นหาสตริงแบบ Case-Sensitive ใน MySQL ด้วย COLLATE

MySQL ค้นหาสตริงแบบ Case-Insensitive โดยค่าเริ่มต้น (ขึ้นอยู่กับ Collation) หากต้องการค้นหาที่ตรงกันแม่นยำรวมถึงตัวพิมพ์เล็ก/ใหญ่ ใช้ COLLATE กำหนด collation แบบ binary

สร้างตารางและข้อมูลทดสอบ

mysql> create table DemoTable1620 (
    -> Subject varchar(20)
    -> );
Query OK, 0 rows affected (0.42 sec)

mysql> insert into DemoTable1620 values('mysql');
mysql> insert into DemoTable1620 values('MySql');
mysql> insert into DemoTable1620 values('mYSQL');
mysql> insert into DemoTable1620 values('MySQL');
mysql> insert into DemoTable1620 values('MYSQL');

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

+---------+
| Subject |
+---------+
| mysql   |
| MySql   |
| mYSQL   |
| MySQL   |
| MYSQL   |
+---------+

คำสั่งค้นหาแบบ Case-Sensitive

mysql> select * from DemoTable1620 where Subject collate utf8_bin = 'MySQL';

ผลลัพธ์

+---------+
| Subject |
+---------+
| MySQL   |
+---------+

Collation แบบ Binary ที่นิยมใช้

Collationลักษณะ
utf8_binเปรียบเทียบแบบไบต์ต่อไบต์ (Case-sensitive, Accent-sensitive)
utf8mb4_binรองรับ Unicode เต็มรูปแบบ (emoji, ตัวอักษรพิเศษ)
latin1_binสำหรับ latin1 legacy

วิธีอื่น: ใช้ BINARY operator

SELECT * FROM DemoTable1620 WHERE BINARY Subject = 'MySQL';

BINARY เป็น shorthand สำหรับ COLLATE ..._bin ทำงานเหมือนกัน

การตั้งค่า Collation ระดับคอลัมน์/ตาราง

หากต้องการ Case-sensitive ตลอดเวลา ให้กำหนด collation ตอนสร้างตาราง:

CREATE TABLE t (col VARCHAR(20) COLLATE utf8_bin);

หมายเหตุ: การใช้ COLLATE ใน WHERE clause อาจทำให้ไม่สามารถใช้ index ได้ (non-sargable) หากคอลัมน์มี collation ต่างกัน ควรพิจารณาเปลี่ยน collation ระดับคอลัมน์ถ้าค้นหาบ่อย