Database Collation ใน PostgreSQL

Collation คือ

Collation คือชุดกฎที่กำหนดวิธีการเปรียบเทียบและจัดเรียงข้อมูลประเภทข้อความในฐานข้อมูล โดยมีความสำคัญอย่างยิ่งในการจัดการข้อมูลที่เกี่ยวข้องกับภาษาและวัฒนธรรมที่แตกต่างกัน
โดยมีวัตถุประสงค์หลัก 3 ประการ ดังนี้:

1. การเปรียบเทีย…


This content originally appeared on DEV Community and was authored by iconnext

Collation คือ

Collation คือชุดกฎที่กำหนดวิธีการเปรียบเทียบและจัดเรียงข้อมูลประเภทข้อความในฐานข้อมูล โดยมีความสำคัญอย่างยิ่งในการจัดการข้อมูลที่เกี่ยวข้องกับภาษาและวัฒนธรรมที่แตกต่างกัน
โดยมีวัตถุประสงค์หลัก 3 ประการ ดังนี้:

1. การเปรียบเทียบข้อมูล: ช่วยให้เปรียบเทียบข้อมูลระหว่างชุดข้อมูลต่างๆ ได้อย่างถูกต้อง แม่นยำ
2. การเรียงลำดับข้อมูล: ช่วยให้เรียงลำดับข้อมูลตามเกณฑ์ต่างๆ เช่น ลำดับตัวอักษร ลำดับตัวเลข หรือวันที่
3. การค้นหาข้อมูล: ช่วยให้ค้นหาข้อมูลที่ต้องการได้รวดเร็วและง่ายดาย

Collation ภาษาไทยใน PostgreSQL

PostgreSQL รองรับ Collation หลากหลายภาษา รวมถึงภาษาไทย โดย Collation ภาษาไทยที่นิยมใช้ ได้แก่

  • th-TH-unicode: Collation นี้ใช้ Unicode เป็นมาตรฐานในการเปรียบเทียบและเรียงลำดับข้อมูล เหมาะสำหรับการใช้งานทั่วไป
  • th-TH-TIS620: Collation นี้ใช้มาตรฐาน TIS620 เป็นมาตรฐานในการเปรียบเทียบและเรียงลำดับข้อมูล เหมาะสำหรับการใช้งานกับระบบเก่า
  • th-TH-dict: Collation นี้ใช้พจนานุกรมไทยเป็นมาตรฐานในการเปรียบเทียบและเรียงลำดับข้อมูล เหมาะสำหรับการใช้งานที่ต้องการเรียงลำดับตามหลักภาษาไทยอย่างเคร่งครัด

การตั้งค่า Collation

ใน Postgres เราสามารถกำหนด Collation ได้ในระดับ Database, Table, Column โดย

  1. ในระดับ Database สามารถกำหนดผ่านคำสั่ง
CREATE DATABASE [ชื่อฐานข้อมูล] COLLATE th-TH-unicode;
  1. ในระดับ Table
CREATE TABLE [ชื่อตาราง] (
  name VARCHAR(255) COLLATE th-TH-unicode
);
  1. ในระดับ Column
ALTER TABLE [ชื่อตาราง]
  ALTER COLUMN [ชื่อคอลัมถ์] SET COLLATE th-TH-unicode;
  1. การใช้งานค้นหาโดยกำหนด
SELECT * FROM mytable ORDER BY name COLLATE th-TH-unicode;

ตัวอย่างการใช้งาน

เพื่อให้เห็นภาพในการใช้งาน Collation ที่เกี่ยวกับการค้นหาจึงขอยกตัวอย่างเป็นภาษาไทยเนื่องจากเป็นบทความภาษาไทย
ตัวอย่างการใช้งาน Collation ภาษาไทยใน PostgreSQL
1.th-TH-x-icu

-- สร้างตารางทดสอบ
CREATE TABLE thai_words (
    word VARCHAR(50) COLLATE "th-TH-x-icu"
);
-- เพิ่มข้อมูลทดสอบ
INSERT INTO thai_words (word) VALUES 
('กข'), ('ขก'), ('คำ'), ('งู'), ('จาน'), ('ฉลาม'), ('ชา'), ('ซุป'), ('ญาติ');
-- ทดสอบการเรียงลำดับ
SELECT * FROM thai_words ORDER BY word;

ผลลัพธ์

word
----
กข
ขก
คำ
งู
จาน
ฉลาม
ชา
ซุป
ญาติ

คำอธิบาย: th-TH-x-icu จะเรียงลำดับตามพจนานุกรมภาษาไทย โดยใช้มาตรฐาน ICU ซึ่งรองรับการเรียงลำดับที่ซับซ้อนของภาษาไทยได้ดี

2.th-TH

-- สร้างตารางทดสอบ
CREATE TABLE thai_names (
    name VARCHAR(50) COLLATE "th-TH"
);
-- เพิ่มข้อมูลทดสอบ
INSERT INTO thai_names (name) VALUES 
('สมชาย'), ('สมหญิง'), ('สมศรี'), ('สมศักดิ์'), ('สมบัติ');
-- ทดสอบการเรียงลำดับ
SELECT * FROM thai_names ORDER BY name;

ผลลัพธ์:

name
----
สมชาย
สมบัติ
สมศรี
สมศักดิ์
สมหญิง

คำอธิบาย: th-TH จะเรียงลำดับตามมาตรฐานทั่วไปของภาษาไทย แต่อาจไม่ละเอียดเท่า th-TH-x-icu ในบางกรณี

3.th_TH.utf8

-- สร้างตารางทดสอบ
CREATE TABLE thai_food (
    food VARCHAR(50) COLLATE "th_TH.utf8"
);
-- เพิ่มข้อมูลทดสอบ
INSERT INTO thai_food (food) VALUES 
('ต้มยำ'), ('ผัดไทย'), ('แกงเขียวหวาน'), ('ส้มตำ'), ('ต้มข่าไก่');
-- ทดสอบการเรียงลำดับ
SELECT * FROM thai_food ORDER BY food;

ผลลัพธ์:

food
----
แกงเขียวหวาน
ต้มข่าไก่
ต้มยำ
ผัดไทย
ส้มตำ

คำอธิบาย: th_TH.utf8 จะเรียงลำดับตามมาตรฐาน UTF-8 ซึ่งรองรับอักขระพิเศษในภาษาไทยได้ดี

4.การเปรียบเทียบระหว่าง Collation

-- สร้างตารางทดสอบ
CREATE TABLE compare_collations (
    word_icu VARCHAR(50) COLLATE "th-TH-x-icu",
    word_th VARCHAR(50) COLLATE "th-TH",
    word_utf8 VARCHAR(50) COLLATE "th_TH.utf8"
);
-- เพิ่มข้อมูลทดสอบ
INSERT INTO compare_collations VALUES 
('เก่ง', 'เก่ง', 'เก่ง'),
('เกง', 'เกง', 'เกง'),
('เก๋ง', 'เก๋ง', 'เก๋ง');
-- ทดสอบการเรียงลำดับด้วย Collation ต่างๆ
SELECT 'ICU' AS collation_type, word_icu AS word FROM compare_collations ORDER BY word_icu
UNION ALL
SELECT 'TH' AS collation_type, word_th AS word FROM compare_collations ORDER BY word_th
UNION ALL
SELECT 'UTF8' AS collation_type, word_utf8 AS word FROM compare_collations ORDER BY word_utf8;

ผลลัพธ์อาจแตกต่างกันเล็กน้อยขึ้นอยู่กับเวอร์ชันของ PostgreSQL และการตั้งค่าระบบ แต่โดยทั่วไปจะเห็นความแตกต่างในการจัดเรียงระหว่าง Collation ต่างๆ
คำอธิบาย: ตัวอย่างนี้แสดงให้เห็นว่า Collation ที่ต่างกันอาจให้ผลการเรียงลำดับที่แตกต่างกัน โดยเฉพาะเมื่อเกี่ยวข้องกับวรรณยุกต์และอักขระพิเศษในภาษาไทย
การเลือกใช้ Collation ที่เหมาะสมขึ้นอยู่กับความต้องการเฉพาะของแอปพลิเคชันของคุณ และอาจต้องทดสอบกับข้อมูลจริงเพื่อให้แน่ใจว่าได้ผลลัพธ์ตามที่ต้องการ


This content originally appeared on DEV Community and was authored by iconnext


Print Share Comment Cite Upload Translate Updates
APA

iconnext | Sciencx (2024-07-14T09:30:35+00:00) Database Collation ใน PostgreSQL. Retrieved from https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/

MLA
" » Database Collation ใน PostgreSQL." iconnext | Sciencx - Sunday July 14, 2024, https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/
HARVARD
iconnext | Sciencx Sunday July 14, 2024 » Database Collation ใน PostgreSQL., viewed ,<https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/>
VANCOUVER
iconnext | Sciencx - » Database Collation ใน PostgreSQL. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/
CHICAGO
" » Database Collation ใน PostgreSQL." iconnext | Sciencx - Accessed . https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/
IEEE
" » Database Collation ใน PostgreSQL." iconnext | Sciencx [Online]. Available: https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/. [Accessed: ]
rf:citation
» Database Collation ใน PostgreSQL | iconnext | Sciencx | https://www.scien.cx/2024/07/14/database-collation-%e0%b9%83%e0%b8%99-postgresql/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.