ทั้งสองฟังก์ชันใช้ค้นหาสตริงจากอาร์กิวเมนต์ แต่มีความแตกต่างสำคัญดังนี้:
- FIND_IN_SET() ใช้รายการสตริงที่เป็นสตริงเดียวคั่นด้วยจุลภาค ในขณะที่ LOCATE() มีสตริงที่จะหาตำแหน่งการปรากฏครั้งแรกของสตริงย่อย
- ใน LOCATE() สามารถจัดการจุดเริ่มต้นการค้นหาได้ด้วยอาร์กิวเมนต์ตำแหน่งที่เป็นตัวเลือก ส่วน FIND_IN_SET() MySQL ไม่ให้ความยืดหยุ่นแบบนี้ ค้นหาจากสตริงแรกโดยค่าเริ่มต้น
- ในกรณีของจำนวนเต็ม FIND_IN_SET() เหมาะสมกว่า LOCATE() มาก สาธิตได้จากตัวอย่าง:
ตัวอย่าง
mysql> SELECT IF(LOCATE(2, '10,11,12,13') > 0, 1, 0) AS result; +--------+ | result | +--------+ | 1 | +--------+ 1 row in set (0.05 sec) mysql> SELECT IF(FIND_IN_SET(2, '10,11,12,13') > 0, 1, 0) AS Result; +--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
จากชุดผลลัพธ์ LOCATE() คืน 1 แม้ 2 จะไม่อยู่ในรายการ (เพราะเจอใน '12') แต่ FIND_IN_SET() คืน 0 ซึ่งเป็นคำตอบที่ถูกต้อง