การจัดเรียงข้อมูลตามลำดับตัวอักษรไทย
CONVERT( name USING tis620 ) ASC
การเรียงลำดับตัวอักษรแบบ tis-620 |
ในการเขียนโปรแกรม PHP เพื่อแสดงข้อมูลจากฐานข้อมูล MySQL การเขียนคำสั่ง SQL ให้จัดเรียงลำดับนั้น เราจะใช้ ORDER BY และกำหนดฟิลด์ที่ต้องการจัดเรียงลำดับ เช่น ในตัวอย่างนี้จะเป็นการจัดเรียงตามลำดับตัวอักษรของชื่อเมนู นั่นก็คือฟิลด์ name นั่นเอง
แต่ในขั้นตอนการสร้างฐานข้อมูลนั้น เราได้กำหนด Charset ของตารางและฟิลด์เป็นการจัดเรียง Collation แบบ utf-8 เอาไว้เพื่อให้รองรับภาษาแบบมาตรฐาน
ดังนั้นเมื่อเขียนโปรแกรมสั่ง ORDER BY name ASC ก็จะมีการจัดเรียงที่จะให้คำที่มีสระนำหน้าอยู่หลัง ฮ. นกฮุก ไปเสียหมด
จะเห็นว่าชื่อเมนูหรือสินค้าที่มี ข นำหน้าจะมาเป็นลำดับแรก ทั้งที่จริงๆแล้ว มีสินค้าที่เป็น ก อยู่หลายรายการ เพียงแต่ว่ามีสระนำหน้าอยู่เท่านั้นเอง
จากรูปด้านบน จะมีรายการที่เป็น ก อยู่ 3 รายการ คือเมนู โกโก้ ต่างๆ แต่เพราะมีสระโอ นำหน้า จึงทำให้การจัดเรียงแบบ utf-8 ให้อยู่ในลำดับท้าย
เพื่อแก้ไขปัญหานี้ การเขียนโปรแกรมเพื่อ ORDER BY จะต้องทำการเปลี่ยนแปลงการจัดเรียง Collation ให้เป็น tis-620 ก่อนเพื่อให้การจัดเรียงภาษาไทยถูกต้อง
CONVERT( name USING tis620 ) ASC
จากภาพจะเห็นว่าเมื่อมีการเปลี่ยนการจัดเรียงภาษาไทยแบบ tis620 ข้อมูลจะเรียงได้ตรงตามที่เราต้องการ นั่นก็คือให้นับคำที่มีสระนำหน้าอยู่รวมกับคำทั่วไปด้วยนั่นเอง
จะเห็นว่าข้อมูลออกมาได้ตรงกับที่ต้องการ
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/
อ้างอิง
Cast Functions and Operators
https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert
mysql การจัดเรียงข้อมูล Utf8 แบบ tis620
การเรียงลำดับชื่อภาษาไทยด้วย order by asc
http://www.mindphp.com/forums/viewtopic.php?t=14139
การเรียงลำดับชื่อภาษาไทยด้วย order by asc
http://www.mindphp.com/forums/viewtopic.php?t=14139
MariaDB 10.1.16 เรียงลำดับข้อความภาษาไทยในตาราง UTF-8 ถูกต้องแล้ว
ความคิดเห็น
แสดงความคิดเห็น