MySQL การใช้งานฟังก์ชัน BINARY

ฟังก์ชัน 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
1admin1234abcd
2Admin1234ABCD
3somchaipassword123

ค้นหา 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
แชร์เรื่องนี้