GORAGOD.com

การเรียงลำดับภาษาไทยบน 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`