ข้ามไปที่เนื้อหาหลัก

MySQL คำสั่ง SQL จัดเรียงคำตามตัวอักษร ภาษาไทย ในฟิลด์ที่กำหนด Collation เป็น utf-8

การจัดเรียงข้อมูลตามลำดับตัวอักษรไทย  

CONVERT( name USING tis620 ) ASC

MySQL คำสั่งเรียงตามตัวอักษรในฟิลด์ที่กำหนด charset เป็น utf-8
การเรียงลำดับตัวอักษรแบบ tis-620


ในการเขียนโปรแกรม PHP เพื่อแสดงข้อมูลจากฐานข้อมูล MySQL การเขียนคำสั่ง SQL ให้จัดเรียงลำดับนั้น เราจะใช้ ORDER BY และกำหนดฟิลด์ที่ต้องการจัดเรียงลำดับ เช่น ในตัวอย่างนี้จะเป็นการจัดเรียงตามลำดับตัวอักษรของชื่อเมนู นั่นก็คือฟิลด์ name นั่นเอง

ฟิลด์ที่กำหนด collation แบบ utf8






แต่ในขั้นตอนการสร้างฐานข้อมูลนั้น เราได้กำหนด 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


MariaDB 10.1.16 เรียงลำดับข้อความภาษาไทยในตาราง UTF-8 ถูกต้องแล้ว

ความคิดเห็น

ค้นหาในเว็บไซต์

เนื้อเพลงที่ได้รับความนิยม ในรอบสัปดาห์

ค้นหาบล็อกนี้