บทความ 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
1.3 กำหนดในส่วนของ Connection
$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 เต็ม ๆ ครับ
01.
<html>
02.
<head>
03.
<title>ThaiCreate.Com PHP & TIS-620</title>
04.
<meta http-equiv=Content-Type content=
"text/html; charset=tis-620"
>
05.
</head>
06.
<body>
07.
<?php
08.
/*** Connect ***/
09.
$objConnect
= mysql_connect(
"localhost"
,
"root"
,
"root"
)
or
die
(
"Error Connect to Database"
);
10.
$objDB
= mysql_select_db(
"mydatabase"
);
11.
mysql_query(
"SET NAMES TIS620"
);
12.
/*
13.
// Or //
14.
mysql_query("SET character_set_results=tis620");
15.
mysql_query("SET character_set_client=tis620");
16.
mysql_query("SET character_set_connection=tis620");
17.
*/
18.
19.
/*** Add Record ***/
20.
if
(
$_GET
[
"Action"
]==
"Save"
)
21.
{
22.
$strSQL
=
"INSERT INTO mydata_tis620 (NAME,SURNAME) VALUES ('"
.
$_POST
[
"txtName"
].
"','"
.
$_POST
[
"txtSurname"
].
"')"
;
23.
mysql_query(
$strSQL
);
24.
}
25.
26.
/*** List Record ***/
27.
$strSQL
=
"SELECT * FROM mydata_tis620"
;
28.
$objQuery
= mysql_query(
$strSQL
)
or
die
(
"Error Query ["
.
$strSQL
.
"]"
);
29.
?>
30.
<table width=
"498"
border=
"1"
>
31.
<tr>
32.
<th width=
"87"
> <div align=
"center"
>UID </div></th>
33.
<th width=
"145"
> <div align=
"center"
>NAME </div></th>
34.
<th width=
"244"
> <div align=
"center"
>SURNAME </div></th>
35.
</tr>
36.
<?php
37.
while
(
$objResult
= mysql_fetch_array(
$objQuery
))
38.
{
39.
?>
40.
<tr>
41.
<td><div align=
"center"
><?php
echo
$objResult
[
"UID"
];?></div></td>
42.
<td><?php
echo
$objResult
[
"NAME"
];?></td>
43.
<td><?php
echo
$objResult
[
"SURNAME"
];?></td>
44.
</tr>
45.
<?php
46.
}
47.
?>
48.
<form name=
"frmMain"
method=
"post"
action=
"?Action=Save"
>
49.
<tr>
50.
<td>
51.
</td>
52.
<td><input name=
"txtName"
type=
"text"
id=
"txtName"
></td>
53.
<td><input name=
"txtSurname"
type=
"text"
id=
"txtSurname"
>
54.
<input name=
"btnSubmit"
type=
"submit"
id=
"btnSubmit"
value=
"Submit"
></td>
55.
</tr>
56.
</form>
57.
58.
</table>
59.
<?php
60.
mysql_close(
$objConnect
);
61.
?>
62.
</body>
63.
</html>
Output
2. การใช้ภาษาไทยกับ UTF-8
ในการใช้ Collation ของ UTF-8 การสร้างตารางหรือแม้แต่ฟิวส์ให้ใช้เป็น utf8_unicode_ci และในการ Import หรือ Export ข้อมูลก็จะต้องใช้เป็น utf8 เช่นเดียวกันครับ ตามรูปตัวอย่างครับ
กำหนด Collation ของตาราง
กำหนด Collation ของฟิวส์
กรณีที่มีการ import หรือ Export ข้อมูลให้เลือกเป็น utf8
2.2 กำหนด Header ให้ใช้เป็น utf-8
2.3 กำหนดในส่วนของ Connection
$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 เต็ม ๆ ครับ
01.
<html>
02.
<head>
03.
<title>ThaiCreate.Com PHP & UTF-8</title>
04.
<meta http-equiv=Content-Type content=
"text/html; charset=utf-8"
>
05.
</head>
06.
<body>
07.
<?php
08.
/*** Connect ***/
09.
$objConnect
= mysql_connect(
"localhost"
,
"root"
,
"root"
)
or
die
(
"Error Connect to Database"
);
10.
$objDB
= mysql_select_db(
"mydatabase"
);
11.
mysql_query(
"SET NAMES UTF8"
);
12.
/*
13.
// Or //
14.
mysql_query("SET character_set_results=utf8");
15.
mysql_query("SET character_set_client=utf8");
16.
mysql_query("SET character_set_connection=utf8");
17.
*/
18.
19.
/*** Add Record ***/
20.
if
(
$_GET
[
"Action"
]==
"Save"
)
21.
{
22.
$strSQL
=
"INSERT INTO mydata_utf8 (NAME,SURNAME) VALUES ('"
.
$_POST
[
"txtName"
].
"','"
.
$_POST
[
"txtSurname"
].
"')"
;
23.
mysql_query(
$strSQL
);
24.
}
25.
26.
/*** List Record ***/
27.
$strSQL
=
"SELECT * FROM mydata_utf8"
;
28.
$objQuery
= mysql_query(
$strSQL
)
or
die
(
"Error Query ["
.
$strSQL
.
"]"
);
29.
?>
30.
<table width=
"498"
border=
"1"
>
31.
<tr>
32.
<th width=
"87"
> <div align=
"center"
>UID </div></th>
33.
<th width=
"145"
> <div align=
"center"
>NAME </div></th>
34.
<th width=
"244"
> <div align=
"center"
>SURNAME </div></th>
35.
</tr>
36.
<?php
37.
while
(
$objResult
= mysql_fetch_array(
$objQuery
))
38.
{
39.
?>
40.
<tr>
41.
<td><div align=
"center"
><?php
echo
$objResult
[
"UID"
];?></div></td>
42.
<td><?php
echo
$objResult
[
"NAME"
];?></td>
43.
<td><?php
echo
$objResult
[
"SURNAME"
];?></td>
44.
</tr>
45.
<?php
46.
}
47.
?>
48.
<form name=
"frmMain"
method=
"post"
action=
"?Action=Save"
>
49.
<tr>
50.
<td>
51.
</td>
52.
<td><input name=
"txtName"
type=
"text"
id=
"txtName"
></td>
53.
<td><input name=
"txtSurname"
type=
"text"
id=
"txtSurname"
>
54.
<input name=
"btnSubmit"
type=
"submit"
id=
"btnSubmit"
value=
"Submit"
></td>
55.
</tr>
56.
</form>
57.
58.
</table>
59.
<?php
60.
mysql_close(
$objConnect
);
61.
?>
62.
</body>
63.
</html>
Output
จะเห็นว่าสามารถรองรับใช้ภาษาไทยได้ทั้ง 2 รูปแบบ แต่ถึงอย่างไรแล้ว ผมอยากให้เปลี่ยนให้เป็น UTF-8 ให้หมดครับ เพราะมันดีกว่าหลาย ๆ ด้านจริง ๆ ครับ สามารถดาวน์โหลด Code ได้จากข้างล่างน่ะครับ