รถเช่า ประเภทต่างๆ
รถเช่า จังหวัด
แสดงผลภาษาไทย PHP กับ MySQL ด้วยฟังก์ชั่นของ mysqli (UTF8)
วันที่: 23/06/2015
เวลา: 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
ในกรณีที่เขียนผ่าน Query สามารถเพิ่มคำสั่ง CHARSET=utf8 ในส่วนของการ Create Table

ในกรณีที่สร้างบย phpMyAdmin สามารถเลือกได้จาก Collation ซึ่งในภาพจะเห็นว่าจะมี utf8 หลายประเภทมาก ซึ่งทั้งหมดนี้รวมอยู่ใน utf8 เพียงแต่ มันแยกออกเป็นหลายตัว ซึ่งส่วนมากจะเป็นรูปแบบการจัดเรียงที่แตกต่างกันไป โดยปกติแล้วให้เลือกใช้แบบ general ได้เลย
หลังจากที่สร้างตารางบน MySQL ให้เป็นแบบ UTF8 แล้ว ขั้นตอนในการเขียน PHP ด้วยฟังก์ชั่นของ mysqli คือ
กำหนด meta ของ charset=utf-8 เสมอ เพราะข้อมูลที่จะส่งไปยัง Server จะอยู่ในรูปแบบของ utf8 โดยที่ไม่ต้องไปแปลงให้เป็นutf8 ก่อนจัดเก็บ
เพิ่ม mysqli_set_charset($objCon, "utf8"); ให้กับการเชื่อมต่อ ก็ถือว่าตอนนี้ข้อมูลทั้งหมดจะถูก รับ-ส่ง จัดเก็บในรูปแบบของutf8 แล้ว
Example

แสดงผลภาษาไทย 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

ในกรณีที่สร้างบย 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. ความคิดเห็นทั้งหมด
ยังไม่มีความคิดเห็น มาร่วมแสดงความคิดเห็นเป็นคนแรกสิ!