ค้นหาข้อมูลในฐานข้อมูลแล้วได้ข้อมูลไม่ครบถ้วน
8 สิงหาคม พ.ศ. 2559 เบญจวรรณ เกื้อกิจ สำนักคอมพิวเตอร์ เปิดอ่านแล้ว 0 ครั้ง

ตัวอย่างปัญหา    

  • ข้อมูลเรียงตามรหัสภูมิภาค

     

    

  • เมื่อต้องการค้นหาข้อมูลที่มีตัวอักษร "ต" โดยใช้ 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 อื่นๆ