Explicit Knowledge เรื่องการใช้งาน Case-insensitiveและ Case-sensitive สำหรับฐานข้อมูล SQL Server

ในการออกแบบฐานข้อมูลนั้นเราจำเป็นต้องคำนึงถึงชนิดรหัสตัวอักษรที่เก็บในฐานข้อมูล (Collation) เพื่อให้ตรงกับวัตถุประสงค์การใช้งานข้อมูลนั้นๆ และลดความผิดพลาดในการเรียกใช้งานข้อมูล ซึ่งในองค์ความรู้นี้จะยกตัวอย่าง ชนิดรหัสตัวอักษรเก็บในฐานข้อมูล  ได้แก่ Thai_CI_AI, Thai_CI_AS, Thai_CS_AIและ Thai_CS_AS

  • Thai หมายถึง ตัวอักษรภาษาไทย
  • CI หมายถึง Case-insensitive ตัวอักษรตัวเล็กกับตัวใหญ่เป็นตัวเดียวกัน
  • CS หมายถึง Case-sensitive ตัวอักษรตัวเล็กกับตัวใหญ่เป็นตัวคนละตัว
  • AI หมายถึง ไม่สนใจวรรณยุกต์
  • AS หมายถึง สนใจวรรณยุกต์

จากภาพ เป็นตัวอย่างการออกแบบตารางโดยใช้ชนิดรหัสตัวอักษรที่เก็บในฐานข้อมูลที่แตกต่างกัน

  1. ฟิวด์ username จะตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CI_AI
  2. ฟิวด์ username จะตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CI_AS
  3. ฟิวด์ username จะตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CS_AI
  4. ฟิวด์ username จะตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CS_AS

จากภาพ เป็นตัวอย่างข้อมูล โดยทั้ง ๔ ตารางจะใส่ข้อมูลเหมือนกัน

จากภาพ เป็นตัวอย่างการคิวรี่ข้อมูลโดยใช้เงื่อนไขเท่ากับ (=) กับชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CI_AI ได้ผลออกมาดังภาพ

  1. เงื่อนไขเป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. พบข้อมูล ๒ แถว เป็น Jessada และ jessada
  2. เงื่อนไขมีตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. พบข้อมูล ๒ แถว เป็น Jessada และ jessada
  3. เงื่อนไขมีตัววรรณยุกต์ภาษาไทยและ เป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. พบข้อมูล ๒ แถว เป็น Jessada และ jessada
  4. เงื่อนไขมีตัววรรณยุกต์ภาษาไทย ตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. พบข้อมูล ๒ แถว เป็น Jessada และ jessada

จากภาพ เป็นตัวอย่างการคิวรี่ข้อมูลโดยใช้เงื่อนไขเท่ากับ (=) กับชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CI_AS ได้ผลออกมาดังภาพ

  1. เงื่อนไขเป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. พบข้อมูล ๒ แถว เป็น Jessada และ jessada
  2. เงื่อนไขมีตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. พบข้อมูล ๒ แถว เป็น Jessada และ jessada
  3. เงื่อนไขมีตัววรรณยุกต์ภาษาไทยและ เป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. ไม่พบข้อมูล
  4. เงื่อนไขมีตัววรรณยุกต์ภาษาไทย ตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. ไม่พบข้อมูล

จากภาพ เป็นตัวอย่างการคิวรี่ข้อมูลโดยใช้เงื่อนไขเท่ากับ (=) กับชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CS_AI ได้ผลออกมาดังภาพ

  1. เงื่อนไขเป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. พบข้อมูล ๑ แถว เป็น jessada
  2. เงื่อนไขมีตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. พบข้อมูล ๑ แถว เป็น Jessada
  3. เงื่อนไขมีตัววรรณยุกต์ภาษาไทยและ เป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. พบข้อมูล ๑ แถว เป็น jessada
  4. เงื่อนไขมีตัววรรณยุกต์ภาษาไทย ตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. พบข้อมูล ๑ แถว เป็น Jessada

จากภาพ เป็นตัวอย่างการคิวรี่ข้อมูลโดยใช้เงื่อนไขเท่ากับ (=) กับชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CS_AS ได้ผลออกมาดังภาพ

  1. เงื่อนไขเป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. พบข้อมูล ๑ แถว เป็น jessada
  2. เงื่อนไขมีตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. พบข้อมูล ๑ แถว เป็น Jessada
  3. เงื่อนไขมีตัววรรณยุกต์ภาษาไทยและ เป็นตัวอักษรพิมพ์เล็กทั้งหมด
    1. ไม่พบข้อมูล
  4. เงื่อนไขมีตัววรรณยุกต์ภาษาไทย ตัวอักษรพิมพ์ใหญ่และ ตัวอักษรพิมพ์เล็ก
    1. ไม่พบข้อมูล

          สรุป

  1. ฟิวด์ username ที่ตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CI_AI เมื่อใช้เงื่อนไขเท่ากับจะได้ข้อมูลที่กรองเงื่อนไขเฉพาะตัวอักษรเท่ากัน และเป็นตัวอักษรเดียวกัน โดยไม่สนใจว่าจะเป็นตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ และไม่สนใจวรรณยุกต์ (เหมาะกับการใช้เงื่อนไข Like ในการค้นหาทั่วไป)
  2. ฟิวด์ username ที่ตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CI_AS เมื่อใช้เงื่อนไขเท่ากับจะได้ข้อมูลที่กรองเงื่อนไขตัวอักษรเท่ากัน เป็นตัวอักษรเดียวกัน และสนใจวรรณยุกต์ โดยไม่สนใจว่าตัวอักษรจะเป็นตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ (เหมาะกับการใช้เงื่อนไข Like ในการค้นหาทั่วไป)
  3. ฟิวด์ username ที่ตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CS_AI เมื่อใช้เงื่อนไขเท่ากับจะได้ข้อมูลที่กรองเงื่อนไขเฉพาะตัวอักษรเท่ากัน เป็นตัวอักษรเดียวกันและ ตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ตรงกัน โดยไม่สนใจวรรณยุกต์ (เหมาะกับการใช้เงื่อนไข Like ในการค้นหาทั่วไป)
  4. ฟิวด์ username ที่ตั้งชนิดรหัสตัวอักษรที่เก็บเป็น Thai_CS_AS เมื่อใช้เงื่อนไขเท่ากับจะได้ข้อมูลที่กรองเงื่อนไขเฉพาะตัวอักษรเท่ากัน เป็นตัวอักษรเดียวกัน ตัวอักษรพิมพ์เล็กหรือพิมพ์ใหญ่ตรงกัน และสนใจวรรณยุกต์ (เหมาะกับการใช้เงื่อนไขที่ต้องการเปรียบเทียบข้อมูลที่เหมือนกัน ๑๐๐ เปอร์เช็นต์ เช่น ชื่อผู้ใช้)

Leave A Reply

Your email address will not be published.