ผู้เขียน หัวข้อ: ทำความเข้าใจกับ UTF-8 และ TIS-620 [WebShop]  (อ่าน 612 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

WebsiteOrMC

  • Newbie
  • *
  • กระทู้: 10
  • Hi there, I'm iDeactivateMC!
    • ดูรายละเอียด
    • MC-CustomMap
ทำความเข้าใจกับ UTF-8 และ TIS-620 [WebShop]
« เมื่อ: พฤษภาคม 23, 2016, 10:15:52 pm »
เหตุผลที่ผมทำบทความนี้ขึ้นก็ก็เพราะมีกระทู้ถามเกี่ยวกับภาษาไทย ???? ทุกวันครับ และเป็นปัญหาที่แก้ไม่จบซะทีสำหรับผู้ที่ กำลังเริ่มเขียน 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
<meta http-equiv=Content-Type content="text/html; charset=tis-620">



1.3 กำหนดในส่วนของ Connection
- กรณีที่กำหนด Collation เป็น tis620_thai_ci ให้ใช้
$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 เต็ม ๆ ครับ

โค๊ด: [Select]
<html>
<head>
<title>VpsHiSpeed PHP & TIS-620</title>
<meta http-equiv=Content-Type content="text/html; charset=tis-620">
</head>
<body>
<?php   
/*** Connect ***/
$objConnect mysql_connect("localhost","root","root") or die("Error Connect to Database");
$objDB mysql_select_db("mydatabase");
mysql_query("SET NAMES TIS620");
/*
// Or //
mysql_query("SET character_set_results=tis620");
mysql_query("SET character_set_client=tis620");
mysql_query("SET character_set_connection=tis620");
*/
 
/***  Add Record ***/
if($_GET["Action"]=="Save")
{
$strSQL "INSERT INTO mydata_tis620 (NAME,SURNAME) VALUES ('".$_POST["txtName"]."','".$_POST["txtSurname"]."')";
mysql_query($strSQL);
}
 
/*** List Record ***/
$strSQL "SELECT * FROM mydata_tis620";
$objQuery mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>

<table width="498" border="1">
<tr>
<th width="87"> <div align="center">UID </div></th>
<th width="145"> <div align="center">NAME </div></th>
<th width="244"> <div align="center">SURNAME </div></th>
</tr>
<?php
while($objResult mysql_fetch_array($objQuery))
{
?>

<tr>
<td><div align="center"><?php echo $objResult["UID"];?></div></td>
<td><?php echo $objResult["NAME"];?></td>
<td><?php echo $objResult["SURNAME"];?></td>
</tr>
<?php
}
?>
     
<form name="frmMain" method="post" action="?Action=Save">
<tr>
<td>
</td>
<td><input name="txtName" type="text" id="txtName"></td>
<td><input name="txtSurname" type="text" id="txtSurname">
<input name="btnSubmit" type="submit" id="btnSubmit" value="Submit"></td>
</tr>
</form>   
 
</table>
<?php
mysql_close
($objConnect);
?>

</body>
</html>


Output



2. การใช้ภาษาไทยกับ UTF-8

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



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



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



กรณีที่มีการ import หรือ Export ข้อมูลให้เลือกเป็น utf8


2.2 กำหนด Header ให้ใช้เป็น utf-8

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

2.3 กำหนดในส่วนของ Connection
- กรณีที่กำหนด Collation เป็น utf8_unicode_ci ให้ใช้
$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 เต็ม ๆ ครับ

โค๊ด: [Select]
<html>
<head>
<title>VpsHiSpeed PHP & UTF-8</title>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>
<?php   
/*** Connect ***/
$objConnect mysql_connect("localhost","root","root") or die("Error Connect to Database");
$objDB mysql_select_db("mydatabase");
mysql_query("SET NAMES UTF8");
/*
// Or //
mysql_query("SET character_set_results=utf8");
mysql_query("SET character_set_client=utf8");
mysql_query("SET character_set_connection=utf8");
*/
 
/***  Add Record ***/
if($_GET["Action"]=="Save")
{
$strSQL "INSERT INTO mydata_utf8 (NAME,SURNAME) VALUES ('".$_POST["txtName"]."','".$_POST["txtSurname"]."')";
mysql_query($strSQL);
}
 
/*** List Record ***/
$strSQL "SELECT * FROM mydata_utf8";
$objQuery mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>

<table width="498" border="1">
<tr>
<th width="87"> <div align="center">UID </div></th>
<th width="145"> <div align="center">NAME </div></th>
<th width="244"> <div align="center">SURNAME </div></th>
</tr>
<?php
while($objResult mysql_fetch_array($objQuery))
{
?>

<tr>
<td><div align="center"><?php echo $objResult["UID"];?></div></td>
<td><?php echo $objResult["NAME"];?></td>
<td><?php echo $objResult["SURNAME"];?></td>
</tr>
<?php
}
?>
     
<form name="frmMain" method="post" action="?Action=Save">
<tr>
<td>
</td>
<td><input name="txtName" type="text" id="txtName"></td>
<td><input name="txtSurname" type="text" id="txtSurname">
<input name="btnSubmit" type="submit" id="btnSubmit" value="Submit"></td>
</tr>
</form>   
 
</table>
<?php
mysql_close
($objConnect);
?>

</body>
</html>

Output



จะเห็นว่าสามารถรองรับใช้ภาษาไทยได้ทั้ง 2 รูปแบบ แต่ถึงอย่างไรแล้ว ผมอยากให้เปลี่ยนให้เป็น UTF-8 ให้หมดครับ เพราะมันดีกว่าหลาย ๆ ด้านจริง ๆ ครับ สามารถดาวน์โหลด Code ได้จากข้างล่างน่ะครับ
« แก้ไขครั้งสุดท้าย: มิถุนายน 19, 2016, 08:49:15 pm โดย WebsiteOrMC »

Nigorn

  • Administrator
  • Sr. Member
  • *****
  • กระทู้: 430
  • เรื่อง VPS ไว้ใจ VPShispeed
    • ดูรายละเอียด
    • http://www.colo-minecraft.com
Re: ทำความเข้าใจกับ UTF-8 เป็น TIS-620 [WebShop]
« ตอบกลับ #1 เมื่อ: พฤษภาคม 31, 2016, 03:17:46 pm »
เจ๋งครับ
 :) :) :)
เช่า : Colo Minecraft ราคาถูก เริ่มต้น 576 บาท คู่มือการเปิดเซิร์ฟ
เช่า : Minecraft PE 1.0.8 / PE ทุกเวอร์ชั่น พร้อมติดตั้ง เล่นได้ทันที เพียง 390 / ทรู 440 คลิปสอน
เช่า : VPS SSD Web server / VPS DiretAdmin, VPS Hosting ราคาถูก
VPS สำหรับ Forex ราคาถูก พร้อมติดตั้งทันที [คลิก]