บทความ PHP & MySQL
เหตุผลที่ผมทำบทความนี้ขึ้นก็ก็เพราะมีกระทู้ถามเกี่ยวกับภาษาไทย ?????? ทุกวันครับ และเป็นปัญหาที่แก้ไม่จบซะทีสำหรับผู้ที่ กำลังเริ่มเขียน MySQL 4.1.x และ 5.0.x ขึ้นไป เพราะในเวอร์ชั่นใหม่นี้ ทาง MySQL ได้ให้ความสำคัญกับ Charset มากขึ้นกว่าเวอร์ชั่น เดิม ๆ ก่อนหน้านี้ที่เรา ๆ ใช้ latin1 ในการเก็บข้อมูลที่เป็นภาษาไทยซึ่งจะมีปัญหาค่อนข้างบ่อยเกี่ยวกับการแสดงผลที่ผิดเพี้ยน การจัดเรียงที่ไม่ถูกต้อง และความจำกัดทางด้านรองรับหลาย ๆ ภาษา ทั้งนี้ผมคิดว่าการนำ Chatset มาใช้ ทาง mySQL เองต้องการแก้ปัญหาที่เกี่ยวข้องกับภาษากับการใช้งาน Application อื่น ๆ ที่รองรับรูปแบบ UTF-8 ไปหมดแล้ว คงจะเหลือแต่คนไทยส่วนมากที่ยังคงยึดตึดกับ TIS-620 ถึงคราวที่เราจะต้องเปลี่ยนมาใช้ UTF-8 กันได้แล้วครับ และผมกล้ารับประกันเลยครับว่า มันดีกว่าเดิม จะช่วยลดปัญหาต่าง ๆ ที่เกี่ยวกับภาษาไทยได้อย่างหมดเกลี้ยง ครับ
ถึงบทความนี้จะมีให้เลือกใช้ทั้ง TIS-620 และ UTF-8 แต่ผมยังแนะนำให้เปลี่ยนให้เป็น UTF-8 ให้หมดครับ
1. การใช้ภาษาไทยกับ TIS-620
ในการใช้ Collation ของ TIS-620 การสร้างตารางหรือแม้แต่ฟิวส์ให้ใช้เป็น tis620_thai_ci และในการ Import หรือ Export ข้อมูลก็จะต้องใช้เป็น tis620 เช่นเดียวกันครับ ตามรูปตัวอย่างครับ

กำหนด Collation ของตาราง

กำหนด Collation ของฟิวส์

กรณีที่มีการ import หรือ Export ข้อมูลให้เลือกเป็น tis620
1.2 กำหนด Header ให้ใช้เป็น tis-620
1.3 กำหนดในส่วนของ Connection
$objConnect = mysql_connect(“localhost”,”root”,”root”) or die(“Error Connect to Database”);
$objDB = mysql_select_db(“mydatabase”);
mysql_query(“SET NAMES TIS620”);
– กรณีที่กำหนด Collation อื่น ๆ ให้ใช้
$objConnect = mysql_connect(“localhost”,”root”,”root”) or die(“Error Connect to Database”);
$objDB = mysql_select_db(“mydatabase”);
mysql_query(“SET character_set_results=tis620”);
mysql_query(“SET character_set_client=tis620”);
mysql_query(“SET character_set_connection=tis620”);
ตัวอย่าง Code เต็ม ๆ ครับ
01.<html>02.<head>03.<title>ThaiCreate.Com PHP & TIS-620</title>04.<meta http-equiv=Content-Type content="text/html; charset=tis-620">05.</head>06.<body>07.<?php   08./*** Connect ***/09.$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");10.$objDB = mysql_select_db("mydatabase");11.mysql_query("SET NAMES TIS620");12./*13.// Or //14.mysql_query("SET character_set_results=tis620");15.mysql_query("SET character_set_client=tis620");16.mysql_query("SET character_set_connection=tis620");17.*/18. 19./***  Add Record ***/20.if($_GET["Action"]=="Save")21.{22.$strSQL = "INSERT INTO mydata_tis620 (NAME,SURNAME) VALUES ('".$_POST["txtName"]."','".$_POST["txtSurname"]."')";23.mysql_query($strSQL);24.}25. 26./*** List Record ***/27.$strSQL = "SELECT * FROM mydata_tis620";28.$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");29.?>30.<table width="498" border="1">31.<tr>32.<th width="87"> <div align="center">UID </div></th>33.<th width="145"> <div align="center">NAME </div></th>34.<th width="244"> <div align="center">SURNAME </div></th>35.</tr>36.<?php37.while($objResult = mysql_fetch_array($objQuery))38.{39.?>40.<tr>41.<td><div align="center"><?php echo $objResult["UID"];?></div></td>42.<td><?php echo $objResult["NAME"];?></td>43.<td><?php echo $objResult["SURNAME"];?></td>44.</tr>45.<?php46.}47.?>      48.<form name="frmMain" method="post" action="?Action=Save">49.<tr>50.<td>51.</td>52.<td><input name="txtName" type="text" id="txtName"></td>53.<td><input name="txtSurname" type="text" id="txtSurname">54.<input name="btnSubmit" type="submit" id="btnSubmit" value="Submit"></td>55.</tr>56.</form>    57. 58.</table>59.<?php60.mysql_close($objConnect);61.?>62.</body>63.</html>Output

2. การใช้ภาษาไทยกับ UTF-8
ในการใช้ Collation ของ UTF-8 การสร้างตารางหรือแม้แต่ฟิวส์ให้ใช้เป็น utf8_unicode_ci และในการ Import หรือ Export ข้อมูลก็จะต้องใช้เป็น utf8 เช่นเดียวกันครับ ตามรูปตัวอย่างครับ

กำหนด Collation ของตาราง

กำหนด Collation ของฟิวส์

กรณีที่มีการ import หรือ Export ข้อมูลให้เลือกเป็น utf8
2.2 กำหนด Header ให้ใช้เป็น utf-8
2.3 กำหนดในส่วนของ Connection
$objConnect = mysql_connect(“localhost”,”root”,”root”) or die(“Error Connect to Database”);
$objDB = mysql_select_db(“mydatabase”);
mysql_query(“SET NAMES UTF8”);
– กรณีที่กำหนด Collation อื่น ๆ ให้ใช้
$objConnect = mysql_connect(“localhost”,”root”,”root”) or die(“Error Connect to Database”);
$objDB = mysql_select_db(“mydatabase”);
mysql_query(“SET character_set_results=utf8”);
mysql_query(“SET character_set_client=utf8”);
mysql_query(“SET character_set_connection=utf8”);
ตัวอย่าง Code เต็ม ๆ ครับ
01.<html>02.<head>03.<title>ThaiCreate.Com PHP & UTF-8</title>04.<meta http-equiv=Content-Type content="text/html; charset=utf-8">05.</head>06.<body>07.<?php   08./*** Connect ***/09.$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");10.$objDB = mysql_select_db("mydatabase");11.mysql_query("SET NAMES UTF8");12./*13.// Or //14.mysql_query("SET character_set_results=utf8");15.mysql_query("SET character_set_client=utf8");16.mysql_query("SET character_set_connection=utf8");17.*/18. 19./***  Add Record ***/20.if($_GET["Action"]=="Save")21.{22.$strSQL = "INSERT INTO mydata_utf8 (NAME,SURNAME) VALUES ('".$_POST["txtName"]."','".$_POST["txtSurname"]."')";23.mysql_query($strSQL);24.}25. 26./*** List Record ***/27.$strSQL = "SELECT * FROM mydata_utf8";28.$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");29.?>30.<table width="498" border="1">31.<tr>32.<th width="87"> <div align="center">UID </div></th>33.<th width="145"> <div align="center">NAME </div></th>34.<th width="244"> <div align="center">SURNAME </div></th>35.</tr>36.<?php37.while($objResult = mysql_fetch_array($objQuery))38.{39.?>40.<tr>41.<td><div align="center"><?php echo $objResult["UID"];?></div></td>42.<td><?php echo $objResult["NAME"];?></td>43.<td><?php echo $objResult["SURNAME"];?></td>44.</tr>45.<?php46.}47.?>      48.<form name="frmMain" method="post" action="?Action=Save">49.<tr>50.<td>51.</td>52.<td><input name="txtName" type="text" id="txtName"></td>53.<td><input name="txtSurname" type="text" id="txtSurname">54.<input name="btnSubmit" type="submit" id="btnSubmit" value="Submit"></td>55.</tr>56.</form>    57. 58.</table>59.<?php60.mysql_close($objConnect);61.?>62.</body>63.</html>Output

จะเห็นว่าสามารถรองรับใช้ภาษาไทยได้ทั้ง 2 รูปแบบ แต่ถึงอย่างไรแล้ว ผมอยากให้เปลี่ยนให้เป็น UTF-8 ให้หมดครับ เพราะมันดีกว่าหลาย ๆ ด้านจริง ๆ ครับ สามารถดาวน์โหลด Code ได้จากข้างล่างน่ะครับ