การค้นหาข้อความแบบ Case-Sensitive ใน MySQL
โดยค่าเริ่มต้น MySQL จะค้นหาข้อความแบบ case-insensitive (ไม่แยกพิมพ์เล็ก/ใหญ่) หากต้องการค้นหาข้อความที่ตรงกันพอดีทุกตัวอักษร รวมถึงพิมพ์เล็ก/ใหญ่ ให้ใช้คำสำคัญ BINARY
ไวยากรณ์
SELECT * FROM yourTableName WHERE BINARY yourColumnName = 'yourStringValue';
ตัวอย่างการใช้งาน
สร้างตารางทดสอบ:
CREATE TABLE ExactSearch (
Id INT NOT NULL AUTO_INCREMENT,
UserId VARCHAR(10),
UserName VARCHAR(20),
PRIMARY KEY(Id)
);
เพิ่มข้อมูลทดสอบ:
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');
แสดงข้อมูลทั้งหมด:
SELECT * FROM ExactSearch;
ค้นหา USER123 แบบ exact match (case-sensitive):
SELECT * FROM ExactSearch WHERE BINARY UserId = 'USER123';
ผลลัพธ์:
+----+---------+----------+
| Id | UserId | UserName |
+----+---------+----------+
| 3 | USER123 | Bob |
+----+---------+----------+
วิธีอื่นๆ
- ใช้
COLLATE utf8_binระดับคอลัมน์:WHERE UserId COLLATE utf8_bin = 'USER123' - ใช้
STRCMP()ฟังก์ชัน:WHERE STRCMP(UserId, 'USER123') = 0
คำเตือน
การใช้ BINARY อาจทำให้ดัชนี (index) ไม่ทำงานได้ ให้พิจารณาใช้ collation แบบ binary ระดับคอลัมน์หรือตารางแทนหากมีการค้นหาบ่อย