ครั้งแรกกับ PostgreSQL (Thai Sorting)

Supphachoke Suntiwichaya
NECTEC
Published in
2 min readNov 24, 2020

เพิ่งได้ลอง PostgreSQL ครั้งแรกเลยเล่นเรียงลำดับภาษาไทยดู ไม่แน่ใจว่าเข้าใจถูกไหมใครมีความรู้แนะนำด้วยนะครับ

สภาพแวดล้อม

Postgres docker image 13

แบบแรก

start container แบบไม่ปรับแต่งอะไรเลย

COLLATE SUPPORT

จะมี th-TH-x-icu มาให้โดยปริยาย

สร้าง Table

CREATE TABLE t1 (
id SERIAL PRIMARY KEY,
st VARCHAR(255)
);

Insert ข้อมูล

INSERT
INTO t1(st)
VALUES ('เฮ'),('โก'),('กาง'),('ขำ'),('๘'),('ฮา'),('กุม'),('แรง'),('A'),('Z'),('8'),('1'),('๑');

ลอง Order แบบใช้ค่าปริยาย

ลอง Order โดยระบุ COLLATE th-TH-x-icu

จะเห็นความแตกต่างคือ ลำดับการเรียงช่วงภาษาอังกฤษกับภาษาไทยต่างกัน ICU จะเอาภาษาไทยขึ้นก่อนส่วนค่าปริยายจะเอาภาษาอังกฤษขึ้นก่อน

แบบที่สอง

ผมเลยสงสัยว่าถ้าเรากำหนด locale ของระบบจะมีความแตกต่างไหม ?

สร้าง Image ใหม่ โดยเพิ่ม th_TH.UTF-8 ให้กับระบบ

คราวนี้ COLLATE SUPPORT จะมี th_TH เพิ่มขึ้นมา

ลองสร้าง table และ Order เปรียบเทียบกัน

COLLATE = C
COLLATE =e n_US
COLLATE ICU vs th_TH

ถ้าดูตามผลที่ได้สรุปว่าถึงจะมี locale th_TH.UTF-8 หรือไม่การเรียงลำดับก็ไม่ต่างกับ UTF-8 ปกติแต่ Thai ICU จะต่างออกไปสำหรับภาษาไทยผสมกับภาษาอังกฤษ

--

--