การเรียงลำดับภาษาไทยบน MySql
หลายๆคนอาจเคยปวดหัวกับการเรียงลำดับภาษาไทยบน MySql กันมาพอสมควรเนื่องจากคำภาษาไทยสามารถมีสระอยู่ข้างหน้าได้ ทำให้การเรียงลำดับคำที่มีสระอยู่ด้านหน้าถูกจัดลำดับไปหลังๆ (หลัง ฮ) ยกตัวอย่างเช่น ชา โกโก้ กาแฟ ปกติเมื่อเรียงลำดับจะได้เป็น กาแฟ ชา โกโก้
ผลข้างต้นมาจากการกำหนด Collation ของคอลัมน์เป็น utf8_general_ci หรือ ut8_unicode_ci ซึ่งหากต้องการเรียงลำดับให้ถูกต้อง ต้องเปลี่ยน Collation ให้เป็น utf8_thai_502_w2 โดยมีวิธีเปลี่ยนที่ง่ายที่สุดดังรูป (สามารถเปลี่ยนได้พร้อมๆกันทุกคอลัมน์ที่สามารถเก็บข้อความได้)
หลังจากเปลี่ยนเสร็จแล้วลองมา Query ดูใหม่ จะได้ผลลัพท์การเรียงที่ถูกต้องดังรูป
คำสั่งสร้างตาราง
คำสั่งแสดงผลลัพท์การทดสอบ
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`value` varchar(20) COLLATE utf8_thai_520_w2 NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_thai_520_w2;
INSERT INTO `test` (`id`, `value`) VALUES
(1, 'ชา'),
(2, 'โกโก้'),
(3, 'กาแฟ');
คำสั่งแสดงผลลัพท์การทดสอบ
SELECT `value` FROM `test` ORDER BY `value`