Tuesday, September 11, 2007

Unicode กับ ภาษาไทย

แต่ไหนแต่ไรมาเคยเข้าใจผิดๆว่า Unicode ใช้เนื้อที่ในการเก็บข้อมูล 2 bytes เพราะเคยได้ยินแว่วๆว่า โปรแกรมต้อง support double bytes นะจึงสามารถใช้เป็น international ได้ แต่พอมาได้ลองเขียนโปรแกรมด้วย RubyOnRails (RoR) ก็เลยได้มีโอกาสดูตัวเนื้อข้อมูลจริง และ ก็ต้องแปลกใจ ทำไมเก็บข้อมูล "ก" ตัวเดียวจากหน้าจอ Web ที่ set เป็น UTF-8 แต่ทำไมข้อมูลในฐานข้อมูลทั้ง MySQL, Postgresql, SQLite3 ในฟิลด์นั้นมันมีความยาวเป็น 3 ไบต์ เก็บเป็น 0xE0 0xB8 0x81 ครับ งงๆ อยู่หลายวัน และก็ได้ทดลองเป็น Windows-874 ด้วยซึ่ง encoding อย่างหลังนี้เก็บเป็น single byte (0xA1) หรือ ไบต์เดียวนั่นเอง ประหยัดกว่าเยอะเลย ก็เลยมีคำถามต่อไปว่า ควรใช้ UTF-8 หรือ Windows-874 ดี ก็เลยได้ข้อสรุปนิดหน่อยคือ ถ้าต้องการประหยัดที่ก็ใช้ windows-874 หรือ TIS620 อย่างเดิม แต่ถ้่าต้องการให้เก็บข้อมูล ภาษาไทย อังกฤษ ภาษาที่ 3,4,... ด้วยใน field เดียวกันก็ควรจะใช้อย่างน้อยเป็น UTF-8 และอีกอย่างนึงคือ Web development tools อย่างเช่น RoR และ database server นั้นการใช้อย่างอื่นที่ไม่ใช่ UTF-8 นั้นต้องใช้ความรู้มากขึ้นอีกหน่อย เพราะฉะนั้นถ้าจะลดปัญหาของการ interface กันในเชิงข้อมูลผมแนะนำให้กำหนดเป็น UTF-8 ครับ สำหรับผู้ที่อยากรู้เพิ่มเติมเกี่ยวกับการเก็บข้อมูลของ UTF-8 สำหรับภาษาไทย ผมแนะนำให้ไปดูที่ link นี้ครับ "http://www.fileformat.info/info/unicode/char/0e01/index.htm" ซึ่ง link นี้คุณศัลย์ในทีมของผมไปหามาให้ครับ

No comments: