DEV Community

MrChoke
MrChoke

Posted on • Originally published at Medium on

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

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

สภาพแวดล้อม

Postgre docker image 13

postgres - Docker Hub

แบบแรก

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

COLLATE SUPPORT

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

สร้าง Table

CREATE TABLE t1 (
  id SERIAL PRIMARY KEY,
  st VARCHAR(255)
);
Enter fullscreen mode Exit fullscreen mode

Insert ข้อมูล

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

ลอง 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 จะต่างออกไปสำหรับภาษาไทยผสมกับภาษาอังกฤษ

Top comments (1)

Collapse
 
stankukucka profile image
Stan Kukučka

@mrchoke may be interesting for you this Thai article