ย่างที่เราทราบกันอยู่แล้วว่าตั้งแต่ MySQL เวอร์ชั่น 4.x หรือ 5.x ขึ้นไปจะให้ความสำคัญกับ Collation ของ Charset มาก โดยตัวCollation นี่เองจะเป็นระบุชนิดของข้อมูล Charset ที่จะจัดเก็บ ซึ่งเป็นกระบวนการบน Database ของ MySQL ที่จะจัดการกับข้อมูลนั้น ๆ และสำหรับ Collation ที่ได้รับความนิยมมากที่สุดก็คือ utf8 เพราะมันสามารถรองรับการจัดเก็บได้หลากหลายภาษา ไม่จำกัดเฉพาะภาษาไทยเท่านั้น โดยข้อมูลจะถูกจัดเก็บในรูปแบบของ Character encoding คือ ทุก Character จะผ่านการแปลงก่อนการจัดเก็บ และ ค่อยแปลงกลับก่อนนำมาใช้ ฉะนั้นมันจะสามารถปัญหาเรื่องภาษาไทยและภาาาอื่น ๆ ได้อย่างแม่นยำไม่ผิดเพี้ยนแน่นอน
การสร้างตารางของ MySQL ให้ Colation เป็นแบบ UTF-8
1.
CREATE
TABLE
IF
NOT
EXISTS `tb_register` (
2.
`UID`
int
(11)
NOT
NULL
auto_increment,
3.
`
NAME
`
varchar
(150)
NOT
NULL
,
4.
`SURNAME`
varchar
(150)
NOT
NULL
,
5.
PRIMARY
KEY
(`UID`)
6.
) 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 ของ 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.
<body>
07.
<?php
08.
/*** Connect ***/
09.
$serverName
=
"localhost"
;
10.
$userName
=
"root"
;
11.
$userPassword
=
"root"
;
12.
$dbName
=
"mydatabase"
;
13.
14.
$objCon
= mysqli_connect(
$serverName
,
$userName
,
$userPassword
,
$dbName
);
15.
16.
mysqli_set_charset(
$objCon
,
"utf8"
);
17.
18.
/*** Add Record ***/
19.
if
(
$_GET
[
"Action"
]==
"Save"
)
20.
{
21.
$strSQL
=
"INSERT INTO tb_register (NAME,SURNAME) VALUES ('"
.
$_POST
[
"txtName"
].
"','"
.
$_POST
[
"txtSurname"
].
"')"
;
22.
$objQuery
= mysqli_query(
$objCon
,
$strSQL
);
23.
}
24.
25.
/*** List Record ***/
26.
$strSQL
=
"SELECT * FROM tb_register"
;
27.
$objQuery
= mysqli_query(
$objCon
,
$strSQL
);
28.
?>
29.
<table width=
"498"
border=
"1"
>
30.
<tr>
31.
<th width=
"87"
> <div align=
"center"
>UID </div></th>
32.
<th width=
"145"
> <div align=
"center"
>NAME </div></th>
33.
<th width=
"244"
> <div align=
"center"
>SURNAME </div></th>
34.
</tr>
35.
<?php
36.
while
(
$objResult
= mysqli_fetch_array(
$objQuery
,MYSQLI_ASSOC))
37.
{
38.
?>
39.
<tr>
40.
<td><div align=
"center"
><?php
echo
$objResult
[
"UID"
];?></div></td>
41.
<td><?php
echo
$objResult
[
"NAME"
];?></td>
42.
<td><?php
echo
$objResult
[
"SURNAME"
];?></td>
43.
</tr>
44.
<?php
45.
}
46.
?>
47.
<form name=
"frmMain"
method=
"post"
action=
"?Action=Save"
>
48.
<tr>
49.
<td>
50.
</td>
51.
<td><input name=
"txtName"
type=
"text"
id=
"txtName"
></td>
52.
<td><input name=
"txtSurname"
type=
"text"
id=
"txtSurname"
>
53.
<input name=
"btnSubmit"
type=
"submit"
id=
"btnSubmit"
value=
"Submit"
></td>
54.
</tr>
55.
</form>
56.
57.
</table>
58.
<?php
59.
mysqli_close(
$objCon
);
60.
?>
61.
</body>
62.
</html>
Output
พื้นฐาน PHP กับ MySQLi
สำหรับ mysql ใน function เดิม : ปัญหาภาษาไทย PHP กับ MySQL ??????????