ตัวอย่างปัญหา
- ข้อมูลเรียงตามรหัสภูมิภาค
- เมื่อต้องการค้นหาข้อมูลที่มีตัวอักษร "ต" โดยใช้ query ด้านล่าง
SELECT *
FROM REF_REGION
WHERE REGION_NAME_TH LIKE '%ต%'
ORDER BY REGION_ID
- จะเห็นว่าค้นหาได้ไม่ครบทุกแถว ผลลัพธ์ที่ถูกต้องคือ
แนวทางการแก้ปัญหา
เปลี่ยน Collation ของฟิลด์ที่ต้องการให้ค้นหาข้อมูล เป็น Thai_BIN ( กรณีเปลี่ยน Collation ของตาราง ฟิลด์ในตารางที่เราต้องการทำการค้นหาอาจไม่เปลี่ยน )
จากแนวทางการแก้ปัญหาดังกล่าว หลายคนอาจมีข้อสงสัยว่าทำไมจึงต้องเปลี่ยน Callation ?
ในกรณีปัญหาที่กล่าวมานั้นเกิดจากรหัสอักขระ (Collation) ที่เราได้ตั้งไว้ตอนส้รางตารางจัดเก็บข้อมูลในฐานข้อมูล ซึ่ง Collation แต่ละแบบมีการเปรียบเทียบอักขระต่างกัน จึงส่งผลให้การค้นหาข้อมูลหรือการเรียงลำดับข้อมูลต่างกันออกไปด้วย
ยกตัวอย่างชื่อ ทิพย์รัตน์ , เขม่น , ไข่พะโล้ , banana , anusorn , Anusorn , Momtri ถ้าเราเรียงลำดับชื่อจากน้อยไปมากจะได้ดังนี้
Thai_CI_AS : Anusorn , anusorn , banana , Momtri , เขม่น ,ไข่พะโล้ ,ทิพย์รัตน์
Thai_CI_AI : Anusorn , anusorn , banana , Momtri , เขม่น ,ไข่พะโล้ ,ทิพย์รัตน์
Thai_CS_AI : anusorn , Anusorn , banana , Momtri , เขม่น ,ไข่พะโล้ ,ทิพย์รัตน์
Thai_CS_AS : Anusorn , anusorn , banana , Momtri , เขม่น ,ไข่พะโล้ ,ทิพย์รัตน์
Thai_BIN : Anusorn , Momtri , anusorn , banana , ทิพย์รัตน์ , เขม่น , ไข่พะโล้
จะเห็นว่ามีการเรียงลำดับออกมาต่างกัน
CI (Case Insensitive) เรียงลำดับโดยไม่สนใจตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
CS (Case Sensitive) เรียงลำดับโดยสนใจตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ มองว่าตัวพิมพ์เล็กอยู่ก่อน
AI (Accent Insensitive ) เรียงลำดับโดยไม่สนใจวรรณยุคต์ การันต์ หรือการออกเสียง
AS (Accent Sensitive ) เรียงลำดับโดยสนใจวรรณยุคต์ การันต์ หรือการออกเสียง
ดังนั้น Callation แต่ละแบบจึงมีทั้งข้อดีและข้อเสีย อยู่ที่เราเลือกใช้ ซึ่งจะเห็นได้ว่า Callation แบบThai_BIN ไม่สามารเรียงอักขระภาษาไทยได้ถูกต้อง แต่สามารถค้นหาข้อมูลได้ครบถ้วนมากกว่า Callation อื่นๆ