แก้ปัญหาภาษาไทยของ MySQL Version 4.x ขึ้นไป

อย่างแรกที่เจอปัญหาใน MySQL 5.0 คือถึงแม้จะกำหนด default-character-set เป็น utf8 แล้วก็ตามที แต่ก็ยังคงมีปัญหากับการจัดการข้อมูลภาษาไทยครับ

ซึ่งเราต้องปรับเปลี่ยนพฤติกรรมของตนเองใหม่เล็กน้อย 3 อย่างใหญ่ ๆ ครับ

  1. กำหนด collation_connection หรือ collation (ถ้าคุณใช้ PHPMyAdmin ที่เป็น interface ภาษาไทยก็จะเรียกว่า "การเรียงลำดับ" ครับ) ของ Database และ Table ที่เราใช้ต้องเป็น utf8_thai_ci เพื่อบอกว่าเราต้องการใช้ภาษาไทยกับ Database และ Table นี้ครับ
  2. กำหนด DEFAULT CHARSET ของ Database และ Table ที่เราใช้ต้องเป็น utf8 เพื่อบอกว่าเราต้องการใช้ภาษาไทยกับ Database และ Table นี้ครับ
  3. กำหนด Storage Engine ให้กับ Table ด้วย เพื่อจะได้ใช้งานได้ดี และเหมาะสมกับการเข้าถึงข้อมูลครับ เช่นต้องการควบคุม Transaction ของข้อมูลก็ใช้ BDB หรือ InnoDB เป็นต้นครับ

ตัวอย่างเช่น

CREATE DATABASE TESTDB
    DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE TEST (
  name VARCHAR(150) NOT NULL,
  PRIMARY KEY(name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

โดยที่ ENGINE=InnoDB เป็น Storage Engine หนึ่งของ MySQL ส่วนใหญ่จะใช้ MySIAM กันจะเป็น ENGINE=MySIAM แทนครับ

ส่วน DEFAULT CHARSET=utf8 นี่ต้องตามนี้ครับ แต่ว่าเท่าที่เจอกันจะเป็น DEFAULT CHARSET=utf8 หรืออื่นๆ ซะมากกว่าครับ ลองดูนะครับ

หรือถ้า Database และ Table เก่าเรามีปัญหาไม่สามารถปรับเปลี่ยนได้ ก็ให้กำหนดตอนก่อนจะ Query ข้อมูลก็ทำได้ครับ โดยใช้คำสั่ง

SET CHARACTER SET utf8;

และตามด้วย

SET collation_connection = utf8_general_ci;

แล้วทำการ Query ข้อมูลครับ