แสดงผลภาษาไทย PHP กับ MySQL ด้วยฟังก์ชั่นของ mysqli (UTF8)

ย่างที่เราทราบกันอยู่แล้วว่าตั้งแต่ 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.`NAMEvarchar(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

PHP MySQL ภาษาไทยกับ mysqli utf8

ในกรณีที่สร้างบย phpMyAdmin สามารถเลือกได้จาก Collation ซึ่งในภาพจะเห็นว่าจะมี utf8 หลายประเภทมาก ซึ่งทั้งหมดนี้รวมอยู่ใน utf8 เพียงแต่ มันแยกออกเป็นหลายตัว ซึ่งส่วนมากจะเป็นรูปแบบการจัดเรียงที่แตกต่างกันไป โดยปกติแล้วให้เลือกใช้แบบ general ได้เลย

  • ci = case-insensitive จัดเรียงตามตัวอักษร มองตัวอักษรใหญ่ และเล็กมีความสำคัญเท่ากัน โดยปกติมักจะใช้ collation แบบ ci
  • cs = case sensitive จัดเรียงโดยให้ความสำคัญกับอักษรตัวใหญ่ มากกว่าตัวเล็ก เช่น Z จะมาก่อน a
  • bin = binary ในรูปแบบของ binaryใช้สำหรับการเปรียบเทียบ

หลังจากที่สร้างตารางบน MySQL ให้เป็นแบบ UTF8 แล้ว ขั้นตอนในการเขียน PHP ด้วยฟังก์ชั่นของ mysqli คือ

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

กำหนด 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.<?php
36.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.<?php
45.}
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.<?php
59.mysqli_close($objCon);
60.?>
61.</body>
62.</html>

Output

PHP MySQL ภาษาไทยกับ mysqli utf8

PHP MySQL ภาษาไทยกับ mysqli utf8

PHP MySQL ภาษาไทยกับ mysqli utf8

พื้นฐาน PHP กับ MySQLi

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