สร้าง Database เพื่อให้ใช้การเรียงลำดับ ภาษาไทยได้

PostgreSQL สามารถเรียงลำดับข้อมูลจากการ query ตามท้องถิ่น (locale) ได้ ดังนั้น จึงสามารถเรียงลำดับข้อมูลภาษาไทยได้ โดยอาศัยโลแคลไทยที่มีอยู่

หลักการก็คือ
- ต้องกำหนดโลแคล LC_CTYPE และ LC_COLLATE ขณะ initdb เท่านั้น โดย PostgreSQL จะบันทึกค่าโลแคลไว้ใน database และจะใช้ค่านี้ไปตลอด
- ต้องกำหนด encoding ที่เหมาะสมด้วย เช่น ถ้าใช้โลแคล th_TH.UTF-8 ก็ต้องใช้ UNICODE encoding ขณะ createdb หรือถ้าใช้โลแคล th_TH.TIS-620 ก็ต้องใช้ WIN874 (การ createdb โดยไม่ระบุ encoding จะใช้ค่า default ที่กำหนดไว้ขณะ initdb)

ตัวอย่างเช่น ถ้าตัดสินใจว่าจะเก็บข้อมูลแบบ Unicode ก็สั่งเช่นนี้ขณะ initdb:

โค้ด:
initdb –lc-ctype=th_TH.UTF-8 –lc-collate=th_TH.UTF-8 -E UNICODE -D {data-dir}

หรือถ้าจะเก็บแบบ TIS-620 ก็สั่งแบบนี้:

โค้ด:
initdb –lc-ctype=th_TH.TIS-620 –lc-collate=th_TH.TIS-620 -E WIN874 -D {data-dir}

มีข้อสังเกตว่า
- ถ้าต้องการให้เรียงข้อมูลถูกต้อง ต้องใช้ encoding ที่เหมาะสมกับ locale ที่กำหนดไว้ขณะ initdb เสมอ ซึ่งหมายความว่าต้องใช้ encoding นั้นไปตลอด
- เมื่อกำหนดโลแคลขณะ initdb แล้ว ความสามารถที่เสียไปคือ จะใช้ LIKE pattern ไม่ได้

No comments yet

Leave a reply