Thursday, November 10, 2011

SQL Server 2008 database collation


  • ค่าเริ่มต้นในที่นี้เป็น Thai_CI_AS = Thai Case Insensitive Accent Sensitive


ปัญหา

  • ถ้าเราเขียนโปรแกรมเชื่อมต่อ database เรื่องนี้เป็นสิ่งหนึ่งที่เราต้องรับรู้เรื่อง database collation 
  • ไปเจอ case ที่ sql query ต้องใส่ชื่อ table หรือ column ตัวใหญ่ ตัวเล็กแป๊ะๆ ใส่ไม่ถูกเป็นอัน Failed อย่างเดียว ซึ่ง database ก้อนนี้ต้องมีอะไรที่แปลกแน่ๆ เพราะ C# กับ SQL Server มานาน พิมพ์ใหญ่หรือเล็กจะถูกมองเป็นตัวเดียวกัน อยู่แล้ว แสดงว่า ก้อนนี้ต้องมีการตั้งค่า ที่ไม่ใช่ default แน่ๆ
  • แนะนำให้ใช้ Thai_CI_AI = Thai Case Insensitive Accent Insensitive ไปเลย หรือจะใช้ค่าเริ่มต้นก็ได้เช่นกัน คือค่าดังภาพด้านบน เราก็จะหมดปัญหาเรื่อง SQL Query command table or column Case Sensitive
  • เราสามารถกำหนดหรือเปลี่ยนค่า collation ได้โดยคลิกขวาที่ database เลือก properties
  • Select a page เลือกเมนู Options เราจะเห็นหัวข้อ Collation: ที่บรรทัดแรก ปรับได้ตามสบาย

อ้างอิงจาก http://mssqlbase.blogspot.com

ความแตกต่างของ Database Collation
Thai_CI_AI คือ Language ภาษาไทย 
   CI = Case Insensitive  
   AI = Accent Insensitive

ต่างกับ Thai_CI_AS คือ
AS = Accent Sensitive

แนะนำใช้ Thai_CI_AI  เพราะ Thai_CI_AS จะมีปัญหาเกี่ยวกับภาษไทยเรื่องของตัวการันต์
เช่นหากเราเขียน QUERY 

SELECT * FROM customer WHERE Name LIKE 'พิมพ%'

หาก Collation เป็น Thai_CI_AS   คนที่ชื่อ พิมพ์ใจ จะไม่ออกมาตามที่ควรจะเป็นครับ
นอกจากนั้นแล้ว Column ใน Table ก็มี Collation ของตัวเองอีกด้วย
ดังนั้นตอน Install Server หรือ Create Database ควรต้องระวังเรื่องนี้ด้วยครับ


อ้างอิง

No comments:

Post a Comment