Tutorial : PHP+MySQL+UTF-8

ปัญหาการทำเว็บโดยใช้ฐานข้อมูลที่เป็น Encode เป็น UFT-8 ยังคงเป็นปัญหาสำหรับหลายๆอยู่ เมื่อไม่นานมานี้ผมทำเว็บให้กับ พี่คนหนึ่งแกก็เจอปัญหาแบบเดียวกันเลย แกก็เลยไม่ยอมใช้ Encode UTF-8 จนผมต้องทำ POC (Proof of Concept) ไปให้พี่แก ซึ่งหลังจากทำแล้วก็คิดว่าน่าจะมัประโยชน์กับหลายๆคนก็เลยมาเขียน Note ไว้ครับ
Software ที่ใช้ในการทดสอบ
1. Windows XP Professional SP3
2. MySQL 5.1.32
3. PHP Version 5.2.6

1. หลังจากทำการติดตั้ง MySQL แล้วให้ทำการ Configuration Database ดังนี้


2. คลิก Next ไปเรื่อยๆ และ Configuration ตามใจจนถึงหน้าต่างนี้ ให้กำหนดค่าดังรูป

3. คลิก Next ต่อไปจนเสร็จสิ้นกระบวนการ Configuration
4. เปิด Command ขึ้นมาแล้ว Login เข้าฐานข้อมูล เมื่อเข้าฐานข้อมูลแล้วให้พิมพคำสั่ง

\s


ข้อมูลที่แสดงออกมาจะต้องไห้เหมือนกับในรูป (ตรงกรอบสีแดง) แสดงว่าฐานข้อมูลเป็น UTF-8 หมดแล้ว
5. จากนั้นก็สร้าง Database ขึ้นมาสักตัวหนึ่งเพื่อทำการทดสอบ ดังนี้

mysql> create database framework;

6. สร้างตารางขึ้นมาทดสอบโดยใช้ Script ดังนี้

CREATE TABLE province (
  province_sqnm int(11) NOT NULL AUTO_INCREMENT,
  province_code varchar(4) NOT NULL,
  province_name varchar(100) NOT NULL,
  status varchar(10) DEFAULT NULL,
  create_by varchar(20) DEFAULT NULL,
  create_date date DEFAULT NULL,
  create_location varchar(25) DEFAULT NULL,
  modify_by varchar(20) DEFAULT NULL,
  modify_date date DEFAULT NULL,
  modify_location varchar(25) DEFAULT NULL,
  PRIMARY KEY (province_sqnm)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

7. เขียน Code PHP ในการติดต่อฐานข้อมูลดังนี้ แล้ว Save ในรูปแบบ Unicode (UTF-8) นะครับ

<?php
error_reporting(E_ALL &~E_WARNING &~E_NOTICE);
define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', 'java'); 
define('DB_NAME','framework');

$con = mysql_connect(DB_HOST,DB_USER,DB_PASS) or die(mysql_error());
mysql_db_query(DB_NAME,"SET NAMES UTF8",$con) or die(mysql_error());
?>

บรรทัดอื่นๆก็เขียนตามรูปแบบการติดต่อฐานข้อมูลปกติ สำคัญตรงตอนการ mysql_db_query นั้นต้องบอกให้ engine ทราบว่า connect ตารางแบบไหน

mysql_db_query(DB_NAME,"SET NAMES UTF8",$con) or die(mysql_error());

ข้อสังเกต “SET NAMES UTF8” ไม่ได้ใช้ UTF-8 นะครับ เพราะ UTF-8 นั้นใช้ในการ Encode หน้าเว็บ ส่วนถ้าเป็นฐานข้อมูลจะใช้ UTF8 แทนครับ
8. จากนั้นก็สร้างหน้า เพิ่ม แก้ไข และแสดงข้อมูลตามปกติครับ ข้อสำคัญที่ควรจำก็คือ ไฟล์ทุกไฟล์ (.php) จะต้อง Save ในรูปแบบ Unicode (UTF-8) นะครับ และในส่วนของ header ไฟล์ที่เป็น html จะต้องใส่ tag meta ดังนี้

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

8. ตัวอย่างการแสดงผลหลายๆภาษาเมื่อใช้ UTF-8
แสดงผลผ่าน Browser

ข้อมูลในฐานข้อมูล

โหลดตัวอย่าง Code จากบทความนี้

หมายเหตุ :
1. หากไม่อยากสร้างผ่าน command line แนะนำ Toad For MyQL ครับใช้งานได้ดี
2. ในการสร้าง ฐานข้อมูล และ ตารางนั้นสามารถกำหนดรูปแบบ CHARSET ได้ แต่ถ้า Default ของเราเป็น UTF8 อยู่ แล้วไม่ต้องกำหนดก็ได้ครับ

อ้างอิง
UTF-8
เริ่มต้นกับ UTF-8 พร้อมโปรแกรมแปลง TIS-620 เป็น UTF-8

  1. No comments yet.

  1. No trackbacks yet.