ย่างที่เราทราบกันอยู่แล้วว่าตั้งแต่ MySQL เวอร์ชั่น 4.x หรือ 5.x ขึ้นไปจะให้ความสำคัญกับ Collation ของ Charset มาก โดยตัวCollation นี่เองจะเป็นระบุชนิดของข้อมูล Charset ที่จะจัดเก็บ ซึ่งเป็นกระบวนการบน Database ของ MySQL ที่จะจัดการกับข้อมูลนั้น ๆ และสำหรับ Collation ที่ได้รับความนิยมมากที่สุดก็คือ utf8 เพราะมันสามารถรองรับการจัดเก็บได้หลากหลายภาษา ไม่จำกัดเฉพาะภาษาไทยเท่านั้น โดยข้อมูลจะถูกจัดเก็บในรูปแบบของ Character encoding คือ ทุก Character จะผ่านการแปลงก่อนการจัดเก็บ และ ค่อยแปลงกลับก่อนนำมาใช้ ฉะนั้นมันจะสามารถปัญหาเรื่องภาษาไทยและภาาาอื่น ๆ ได้อย่างแม่นยำไม่ผิดเพี้ยนแน่นอน
การสร้างตารางของ MySQL ให้ Colation เป็นแบบ UTF-8
1.CREATE TABLE IF NOT EXISTS `tb_register` (2.`UID` int(11) NOT NULL auto_increment,3.`NAME` varchar(150) NOT NULL,4.`SURNAME` varchar(150) NOT NULL,5.PRIMARY KEY (`UID`)6.) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;ในกรณีที่เขียนผ่าน Query สามารถเพิ่มคำสั่ง CHARSET=utf8 ในส่วนของการ Create Table

ในกรณีที่สร้างบย phpMyAdmin สามารถเลือกได้จาก Collation ซึ่งในภาพจะเห็นว่าจะมี utf8 หลายประเภทมาก ซึ่งทั้งหมดนี้รวมอยู่ใน utf8 เพียงแต่ มันแยกออกเป็นหลายตัว ซึ่งส่วนมากจะเป็นรูปแบบการจัดเรียงที่แตกต่างกันไป โดยปกติแล้วให้เลือกใช้แบบ general ได้เลย
- ci = case-insensitive จัดเรียงตามตัวอักษร มองตัวอักษรใหญ่ และเล็กมีความสำคัญเท่ากัน โดยปกติมักจะใช้ collation แบบ ci
- cs = case sensitive จัดเรียงโดยให้ความสำคัญกับอักษรตัวใหญ่ มากกว่าตัวเล็ก เช่น Z จะมาก่อน a
- bin = binary ในรูปแบบของ binaryใช้สำหรับการเปรียบเทียบ
หลังจากที่สร้างตารางบน MySQL ให้เป็นแบบ UTF8 แล้ว ขั้นตอนในการเขียน PHP ด้วยฟังก์ชั่นของ mysqli คือ
กำหนด meta ของ charset=utf-8 เสมอ เพราะข้อมูลที่จะส่งไปยัง Server จะอยู่ในรูปแบบของ utf8 โดยที่ไม่ต้องไปแปลงให้เป็น utf8 ก่อนจัดเก็บ
01.<?php 02.$serverName = "localhost";03.$userName = "root";04.$userPassword = "root";05.$dbName = "mydatabase";06. 07.$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);08. 09.mysqli_set_charset($objCon, "utf8");เพิ่ม mysqli_set_charset($objCon, “utf8”); ให้กับการเชื่อมต่อ ก็ถือว่าตอนนี้ข้อมูลทั้งหมดจะถูก รับ-ส่ง จัดเก็บในรูปแบบของ utf8 แล้ว
Example
01.<html>02.<head>03.<title>ThaiCreate.Com PHP/MySQL (Thai UTF8)</title>04.<meta http-equiv=Content-Type content="text/html; charset=utf-8">05.</head>06.<body>07.<?php 08./*** Connect ***/09.$serverName = "localhost";10.$userName = "root";11.$userPassword = "root";12.$dbName = "mydatabase";13. 14.$objCon = mysqli_connect($serverName,$userName,$userPassword,$dbName);15. 16.mysqli_set_charset($objCon, "utf8");17. 18./*** Add Record ***/19.if($_GET["Action"]=="Save")20.{21.$strSQL = "INSERT INTO tb_register (NAME,SURNAME) VALUES ('".$_POST["txtName"]."','".$_POST["txtSurname"]."')";22.$objQuery = mysqli_query($objCon,$strSQL);23.}24. 25./*** List Record ***/26.$strSQL = "SELECT * FROM tb_register";27.$objQuery = mysqli_query($objCon,$strSQL);28.?>29.<table width="498" border="1">30.<tr>31.<th width="87"> <div align="center">UID </div></th>32.<th width="145"> <div align="center">NAME </div></th>33.<th width="244"> <div align="center">SURNAME </div></th>34.</tr>35.<?php36.while($objResult = mysqli_fetch_array($objQuery,MYSQLI_ASSOC))37.{38.?>39.<tr>40.<td><div align="center"><?php echo $objResult["UID"];?></div></td>41.<td><?php echo $objResult["NAME"];?></td>42.<td><?php echo $objResult["SURNAME"];?></td>43.</tr>44.<?php45.}46.?> 47.<form name="frmMain" method="post" action="?Action=Save">48.<tr>49.<td>50.</td>51.<td><input name="txtName" type="text" id="txtName"></td>52.<td><input name="txtSurname" type="text" id="txtSurname">53.<input name="btnSubmit" type="submit" id="btnSubmit" value="Submit"></td>54.</tr>55.</form> 56. 57.</table>58.<?php59.mysqli_close($objCon);60.?>61.</body>62.</html>Output



พื้นฐาน PHP กับ MySQLi
สำหรับ mysql ใน function เดิม : ปัญหาภาษาไทย PHP กับ MySQL ??????????