ฟังก์ชัน BINARY ใน MySQL ใช้เพื่อ บังคับให้การเปรียบเทียบค่าข้อความ (string comparison) เป็นแบบ “case-sensitive” (แยกพิมพ์เล็ก/ใหญ่)
โดยปกติ MySQL จะเปรียบเทียบข้อความแบบ ไม่แยกพิมพ์เล็ก-ใหญ่ (case-insensitive) หากใช้ collation เช่น utf8_general_ci
การใช้ BINARY จะเปลี่ยนค่าข้อความให้เป็นชนิดไบนารี (binary string) เพื่อให้เปรียบเทียบแบบเข้มงวดกับ byte จริง
ประโยชน์ของฟังก์ชัน BINARY
- บังคับให้การเปรียบเทียบข้อความแยกพิมพ์เล็ก/ใหญ่
- ใช้ตรวจสอบความถูกต้องของรหัสผ่าน, Token หรือข้อมูลที่ความต่างของตัวอักษรมีผล
- ใช้ใน
WHERE,IF,CASE, หรือJOINเพื่อเปรียบเทียบข้อมูลแบบ binary - ป้องกันความคลาดเคลื่อนในการค้นหา เช่น
'admin'≠'Admin' - ใช้แสดงชนิดข้อมูลแบบไบนารี เมื่อใช้ใน
SELECT BINARY column_name
รูปแบบการใช้งาน
BINARY string_value
string_valueคือข้อความ (CHAR,VARCHAR, literal string ฯลฯ) ที่จะถูกแปลงเป็น binary
ตัวอย่างการใช้งาน
SQL
-- เทียบแบบ case-insensitive
SELECT 'admin' = 'Admin';
-- ผลลัพธ์: 1 (เหมือนกัน)
-- เทียบแบบ case-sensitive ด้วย BINARY
SELECT BINARY 'admin' = 'Admin';
-- ผลลัพธ์: 0 (ไม่เหมือนกัน)ตัวอย่างการประยุกต์ใช้งาน
สมมติว่ามีตาราง users ซึ่งมีข้อมูลดังนี้
| user_id | username | password |
|---|---|---|
| 1 | admin | 1234abcd |
| 2 | Admin | 1234ABCD |
| 3 | somchai | password123 |
ค้นหา user ที่กรอก username ตรงเป๊ะ (แยกพิมพ์เล็ก/ใหญ่)
SQL
SELECT *
FROM users
WHERE BINARY username = 'Admin';ค้นหา user ที่มีรหัสผ่านตรงกับที่กรอกเข้ามา case-sensitive
SQL
SELECT *
FROM users
WHERE BINARY password = '1234ABCD';ข้อควรระวังในการใช้งาน
BINARYไม่ใช่ฟังก์ชันแปลงเป็นเลขฐานสอง อย่าสับสนกับBIN()- หากใช้
BINARYกับฟิลด์ที่ไม่ได้มี collation ที่สนับสนุนการเปรียบเทียบ binary อาจไม่เห็นผลชัดเจน - ไม่ควรใช้
BINARYกับข้อมูลที่ไม่ให้ความสำคัญเรื่อง case เช่น ชื่อสินค้า, จังหวัด ฯลฯ - ถ้าใช้ใน
ORDER BY BINARY column_nameจะเรียงลำดับแบบตาม byte จริง เช่นZมาก่อนa