เพิ่งได้ลอง PostgreSQL ครั้งแรกเลยเล่นเรียงลำดับภาษาไทยดู ไม่แน่ใจว่าเข้าใจถูกไหมใครมีความรู้แนะนำด้วยนะครับ
สภาพแวดล้อม
Postgre 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 เปรียบเทียบกัน
ถ้าดูตามผลที่ได้สรุปว่าถึงจะมี locale th_TH.UTF-8 หรือไม่การเรียงลำดับก็ไม่ต่างกับ UTF-8 ปกติแต่ Thai ICU จะต่างออกไปสำหรับภาษาไทยผสมกับภาษาอังกฤษ
Top comments (1)
@mrchoke may be interesting for you this Thai article