บันทึกการเก็บ JSON ใน MariaDB และ ภาษาไทย
ผมทดสอบโดยใช้ MariaDB 10.5.7 ผ่าน Docker Container โดยใช้ VSCode Extension ชื่อว่า MySQL by cweijan ช่วยในการ Query และ จับหน้าจอนะครับ

การเรียงลำดับภาษาไทย
สำหรับการ Sort ภาษาไทยบน MariaDB นั้น อ.พฤษภ์ บุญมา ได้เขียนอธิบายไว้แบบชัดเจนแล้วที่
การเรียงข้อความภาษาไทยที่เข้ารหัสแบบ UTF-8 ใน MariaDB
ซึ่งปัจจุบันเราสามารถใช้ *_thai_520_w2 กับ unicode แบบต่างๆ ที่ MariaDB Suport เช่น
- utf8_thai_520_w2
- utf8mb4_thai_520_w2
- ucs2_thai_520_w2
- utf16_thai_520_w2
- utf32_thai_520_w2
ตัวอย่าง

ผมสร้าง 2 ตารางแบบ general_ci ซึ่งส่วนใหญ่มักเป็นค่าเริ่มต้น กับ thai_520_w2 และผมลอง insert ข้อมูลตามที่ อ.พฤษภ์ เขียนไว้
และลอง query ดู




เป็นอันว่ามันใช้ได้จริงๆ สวยงามพร้อมรับประทานมาก
JSON
มาดู JSON กันบ้าง MariaDB สนับสนุน JSON มาสักพักหนึ่งแล้ว แต่อาจจะไม่เท่าทางฝั่ง PostgreSQL และโดยรายละเอียดบางอย่างก็ไม่เหมือนกับ MySQL ทั้งหมดผมก็ไม่แม่นเพราะเพิ่มหัดใช้เหมือนกันซึ่งก็ยกตัวอย่างตามที่ใช้ดังนี้
Field Type
เราสามารถใช้ shortcut JSON กับ MariaDB ได้เลยซึ่งเวลาเสร็จแล้วจะเป็นแบบนี้


จะเห็นว่า MariaDB จะใช้ LONGTEXT และ CHARSET utf8mb4 และ COLLATE utf8mb4_bin
Insert ตัวอย่างข้อมูล

Query

ข้างบนลอง sort แบบมั่วๆ จากก้อน JSON ก็ดูเหมือนเกือบเรียงได้ เพราะข้างหน้ามีตัวอักษรเหมือนกันคือ { “th”: “ แต่ถ้าเราจะเรียงทางฝั่ง en บ้างละทำไง ? จริงๆ เท่าที่ค้นดูมันก็มีหลายทางออกนะ เช่นเอาแต่ละ path คือ th และ en แยกออกไปเก็บไว้ทำเป็น column ไว้ search และ sort โดยเฉพาะก็ได้ แต่ผมทดสอบแบบตรงไปตรงมากับ field JSON เลย
Query เฉพาะข้อความ
Sort เบื้องต้น




ถ้าเราอยากเรียงตามภาษาเฉยๆ แต่จะเอา JSON ไปใช้เลยละ




Filter
ถ้าเราจะกรองละ
จากที่เคยลองผ่าน SQLAlchemy (python) ผมเจอปัญหาเรื่อง case-sensitive แต่ลองกับ RAW SQL แล้วสามารถ LIKE แบบ case-insensitive ได้เดี๋ยวต้องกลับไปดูอีกที
จริงๆ JSON ยังเล่นได้อีกหลายแบบผมบันทึกไว้เท่าที่เล่นแค่นี้ก่อนนะครับใครมีข้อเสนอแนะสามารถพูดคุยแลกเปลี่ยนกันได้เลยนะครับ
Top comments (0)