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

Date : 2015-06-23 Time : 16:50:03
http://www.thaicreate.com/community/php-mysql-mysqli-thai-utf8.html

แสดงผลภาษาไทย PHP กับ MySQL ด้วยฟังก์ชั่นของ mysqli (UTF8) ช่วงหลัง ๆ เห็นสมาชิกเริ่มหันมาใช้ function ของmysqli กันมากขึ้น ซึ่งก็ยังมีหลาย ๆ คนที่ใช้รูปแบบการเขียนภาษาไทยแบบผิด ๆ อยู่ ซึ่งปัญหาที่ตามมาคือ แสดงผลภาษาไทยได้ถูกต้องบ้าง ไม่ถูกต้องบ้าง และเมื่อจัดเก็บลงบน MySQL แล้ว บน phpMyAdmin กลับอ่านไม่ออก ไม่สามารถ Export นำไปใช้งานที่อื่นได้ ซึ่งจะเป็นปัญหาที่สะสมรอปัญหาใหญ่ที่จะเกิดขึ้นในอนาคตตามมาอย่างแน่นอน



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


อย่างที่เราทราบกันอยู่แล้วว่าตั้งแต่ MySQL เวอร์ชั่น 4.x หรือ 5.x ขึ้นไปจะให้ความสำคัญกับ Collation ของ Charset มาก โดยตัวCollation นี่เองจะเป็นระบุชนิดของข้อมูล Charset ที่จะจัดเก็บ ซึ่งเป็นกระบวนการบน Database ของ MySQL ที่จะจัดการกับข้อมูลนั้น ๆ และสำหรับ Collation ที่ได้รับความนิยมมากที่สุดก็คือ utf8 เพราะมันสามารถรองรับการจัดเก็บได้หลากหลายภาษา ไม่จำกัดเฉพาะภาษาไทยเท่านั้น โดยข้อมูลจะถูกจัดเก็บในรูปแบบของ Character encoding คือ ทุก Character จะผ่านการแปลงก่อนการจัดเก็บ และ ค่อยแปลงกลับก่อนนำมาใช้ ฉะนั้นมันจะสามารถปัญหาเรื่องภาษาไทยและภาาาอื่น ๆ ได้อย่างแม่นยำไม่ผิดเพี้ยนแน่นอน

การสร้างตารางของ MySQL ให้ Colation เป็นแบบ UTF-8

CREATE TABLE IF NOT EXISTS `tb_register` ( `UID` int(11) NOT NULL auto_increment, `NAME` varchar(150) NOT NULL, `SURNAME` varchar(150) NOT NULL, PRIMARY KEY (`UID`) ) 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.From Author attachai ( thaidreamhost@hotmail.com )



Add Your Comment :
Name :
E-mail :
  ย่อหน้า ตัวหนา ตัวยก เส้นใต้ตัวห้อย ตัวหนังสือเรืองแสง ตัวหนังสือมีเงา ตัวเอียง สีแดง สีเขียว สีน้ำเงิน  
  18271  
 
Message :
Picture(Not More Than 50 k):
  Confirm that not spam
 

 

Back To Comment