utf8_bin VS utf8_unicode_ci อะไรจะเจ๋งกว่ากัน

ก่อนหน้านี้ที่ผมสร้างฐานข้อมูล ผมจะใช้ collation เป็น utf8_unicode_ci เสมอ เพื่อป้องกันปัญหาภาษาไทยในmysqlเพี้ยน

แต่ปัญหาอยู่ที่ว่า ค่าเริ่มต้นของการสร้างฐานข้อมูลในโฮสต์จริง ส่วนใหญ่มันเป็น latin_swedish_ci ซึ่งก่อนที่ผมจะลงระบบได้

ผมต้องเข้าไปแก้ตรงนี้ก่อนให้เป็น utf8_unicode_ci เพื่อไม่ให้ภาษาไทยมันเพี้ยน ทำให้เสียเวลาเป็นอย่างยิ่ง แต่ก็ทนใช้แบบนี้เรื่อยมา จนถึง ณ วันนี้เลยลองใช้ utf8_bin ดู ปรากฏว่า เวิร์ค มาก ผมไม่ต้องเข้าไปเปลี่ยนตัว collation อีกต่อไป ไม่ว่าจะเป็น collation ใด เว็บผมก็แสดงภาษาไทยได้ถูกต้อง แม่นยำ ไม่มีเพี้ยนแต่ประการใด แต่ก็อดสงสัยไม่ได้ว่าเหตุใดข้อมูลมันถึงไม่เพี้ยน เลยลองเข้าไปดูในตารางที่เก็บข้อมูลก็ปรากฏว่า ข้อมูลทั้งหมดถูกแปลงให้เป็นเลขฐาน 16 หมดเลย…มิน่า ข้อมูลถึงยังแสดงผลถูกต้องได้ เพราะว่ามันแปลงกลับไปกลับมานี่เอง

ประสิทธิภาพระหว่าง utf8_bin กับ unicode_ci อันนี้ผมไม่ได้ทดสอบดูน่ะ แต่วิฌคราะห์จากคามรู้ที่มีอยู่อันน้อยนิด มองว่า utf8_bin น่าจะมีประสิทธิภาพมากกว่าในเรื่องของความแม่นยำ และความเร็ว โดยเฉพาะความแม่นยำผมว่ามันน่าจะถูกต้อง 100% เลย เพราะว่าข้อมูลถูกแปลงอยู่แล้ว ซึ่งไม่ต้องกังวลพวกอักขระบางตัวที่จะทำให้ระบบเรามีปัญหา ส่วนความเร็ว การที่มันเป็นเลขฐานอยู่แล้วมันน่าจะทำความเร็วได้ดีกว่า

แต่ข้อเสียก็คือ ข้อมูลมันถูกแปลงอยู่ เวลากดเข้าไปดู ก็ไม่รู้เรื่องครับ แต่ก็ปลอดภัยไปอีกแบบ ที่จริงมันมีวิธีการ export ออกเป็นอักขระปกติได้ ไว้โอกาสหน้าจะมาเขียนวิธีการบอกครับ

Don't be shellfish...Share on FacebookTweet about this on TwitterShare on Google+Digg thisPin on PinterestShare on Reddit
Post Tagged with , , ,

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *

คุณอาจจะใช้ป้ายกำกับและคุณสมบัติHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>