|    
         
        
           
            |   | 
            
			 
   
     
        แก้ปัญหาภาษาไทย php กับ MySQL (TIS-620 กับ UTF-8)       | 
   
 
			
  ปัญหาภาษาไทย PHP กับ MySQL ?????????? 
 
 
บทความ PHP & MySQL 
 
 
เหตุผลที่ผมทำบทความนี้ขึ้นก็ก็เพราะมีกระทู้ถามเกี่ยวกับภาษาไทย ?????? ทุกวันครับ และเป็นปัญหาที่แก้ไม่จบซะทีสำหรับผู้ที่ กำลังเริ่มเขียน 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 เต็ม ๆ ครับ 
<html>
<head>
<title>ThaiCreate.Com 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 เต็ม ๆ ครับ 
<html>
<head>
<title>ThaiCreate.Com 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 ได้จากข้างล่างน่ะครับ           
 
 
.      
		          
                 
    
                             					
			
              			             
                           
                             |   | 
                               | 
                             	
		                        | 
                            
                           
                             | 
 | 
                               | 
                              
                             			
 | 
           
         
           
          
            
              
                  
                     | 
                   
                  
                    |   | 
                    By :  | 
                    
                      
                      TC Admin	
                     | 
                   
                  
                    |   | 
                    Article :  | 
                    บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ  | 
                   
				  
                  
                    |   | 
                    Score Rating :  | 
                    
                                               | 
                   
                  
                    |   | 
                    Create Date :  | 
                    2009-01-12 | 
                   
				  
                  
                    |   | 
                    Download :  | 
                    
                                             
                      (0.0045 MB)                                           | 
                   
                | 
             
           
		
		
        
        
       | 
     
   
 
		  
         | 
		
          
		   
		  
              
      
     |