ปัญหา: LIKE ไม่แยกตัวพิมพ์ใหญ่-เล็ก โดยค่าเริ่มต้น
MySQL ใช้ Collation ที่ Case-Insensitive โดยค่าเริ่มต้น (เช่น utf8mb4_0900_ai_ci)
SELECT 'john' LIKE 'JOHN'; -- ผลลัพธ์: 1 (true)
แก้ไขด้วย LIKE BINARY
ใช้คำสำคัญ BINARY หลัง LIKE เพื่อบังคับเปรียบเทียบแบบ Binary (Case-Sensitive):
SELECT column_name LIKE BINARY 'search_string' FROM your_table;
ตัวอย่างการใช้งาน
สร้างตารางและข้อมูลตัวพิมพ์เล็ก
CREATE TABLE LikeBinaryDemo (Name VARCHAR(200));
INSERT INTO LikeBinaryDemo VALUES ('john');
กรณีที่ 1: ใช้ BINARY (Case-Sensitive)
SELECT Name LIKE BINARY 'JOHN' FROM LikeBinaryDemo;
+-------------------------+
| Name LIKE BINARY 'JOHN' |
+-------------------------+
| 0 |
+-------------------------+
กรณีที่ 2: ไม่ใช้ BINARY (Case-Insensitive)
SELECT Name LIKE 'JOHN' FROM LikeBinaryDemo;
+------------------+
| Name LIKE 'JOHN' |
+------------------+
| 1 |
+------------------+
วิธีอื่น: ใช้ COLLATE
SELECT Name COLLATE utf8mb4_bin = 'JOHN' FROM LikeBinaryDemo;
-- หรือ
SELECT Name LIKE 'JOHN' COLLATE utf8mb4_bin FROM LikeBinaryDemo;
ใช้ใน WHERE Clause
SELECT * FROM users WHERE username LIKE BINARY 'Admin%';
-- จะไม่จับ 'admin', 'ADMIN', 'AdMiN'
สรุป: ใช้ LIKE BINARY สำหรับการค้นหาที่ต้องการ Case-Sensitive อย่างง่ายและอ่านง่าย