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

บังคับให้ LIKE ใน MySQL แยกตัวพิมพ์เล็ก-ใหญ่ ด้วย BINARY


ปัญหา: 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 อย่างง่ายและอ่านง่าย