วิธีแก้ 1 กำหนด Database ให้ใช้
tis620
แก้ไขไฟล์ config ของ MySQL โดยการกำหนดค่าดังนี้
บน Linux จะอยู่ที่ etc/my.cnf
บน Windows จะอยู่ที่ windows/my.ini
restart MySQL อีกครั้งหนึ่ง ตรวจสอบให้แน่ใจว่า default character เป็น tis620 แล้ว
ตัวอย่าง การตรวจสอบ ด้วยคำสั่ง s ใน mysql client บน Windows
ตัวอย่าง การตรวจสอบ ด้วยคำสั่ง s ใน mysql client บน Linux
นอกจากนี้เราสามารถใช้ MySQL Client tool อื่นๆ สำหรับตรวจสอบได้เช่นกัน
ตัวอย่างค่า default เริ่มแรก

เมื่อปรับค่า default เป็น tis620

ดังนั้น ตัวแปลดังกล่าว ควรจะมีค่าตังนี้
character set กับ collation ??
character set คือรูปแบบของการจัดเก็บข้อมูล เราสามารถดูรูปแบบที่ MySQL สนับสนุนการใช้งานได้จาก คำสั่ง SHOW CHARACTER SET;
collation คือรูปแบบของการจัดเรียงและเปรียบเทียบ รูปแบบการจัดเรียงที่มักใช้กันบ่อยๆ มักลงท้ายด้วย ci ,cs, bin (เรียงตามลำดับ) เราสามารถดูรายชื่อ collation ที่สนับสนุนได้จาก SHOW COLLATION;
ci, cs, bin ?? มีความหมายดังนี้
ci = case-insensitive จัดเรียงตามตัวอักษร มองตัวอักษรใหญ่ และเล็กมีความสำคัญเท่ากัน โดยปกติมักจะใช้ collation แบบ ci
cs = case sensitive จัดเรียงโดยให้ความสำคัญกับอักษรตัวใหญ่ มากกว่าตัวเล็ก เช่น Z จะมาก่อน a
bin = binary ใช้สำหรับการเปรียบเทียบ
2. บอกให้ mysql รู้ถึงรูปแบบของภาษาที่ต้องการใช้ ผ่าน sql command
เราสามารถใช้คำสั่ง SET เพื่อกำหนดค่าตัวแปลของ MySQL ได้
ดังนั้น ก่อนที่จะ insert, update เราต้องบอกให้ MySQL ทราบถึงรูปแบบของภาษาที่ใช้ ยกตัวอย่างเช่น
(UPDATE - 2006.02.08)
ยังมีอีกวิธีหนึ่งคือ แนบคำสั่งไปกับประโยค SQL เลย เช่น
Links
MySQL : Chapter 10. Character Set Support
เมื่ออักษรภาษาไทยกลายเป็น ?????? (phpconcept.com)
แก้ไขไฟล์ config ของ MySQL โดยการกำหนดค่าดังนี้
CODE
[mysqld]
default-character-set=tis-620
default-character-set=tis-620
บน Linux จะอยู่ที่ etc/my.cnf
บน Windows จะอยู่ที่ windows/my.ini
restart MySQL อีกครั้งหนึ่ง ตรวจสอบให้แน่ใจว่า default character เป็น tis620 แล้ว
ตัวอย่าง การตรวจสอบ ด้วยคำสั่ง s ใน mysql client บน Windows
QUOTE
mysql> s
--------------
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)
Connection id: 2
Current database:
Current user: [email protected]
SSL: Not in use
Using delimiter: ;
Server version: 5.0.18
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: tis620
Db characterset: tis620
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 30 sec
Threads: 1 Questions: 3 Slow queries: 0 Opens: 0 Flush tables: 1 Open table
s: 3 Queries per second avg: 0.100
--------------
--------------
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)
Connection id: 2
Current database:
Current user: [email protected]
SSL: Not in use
Using delimiter: ;
Server version: 5.0.18
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: tis620
Db characterset: tis620
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 30 sec
Threads: 1 Questions: 3 Slow queries: 0 Opens: 0 Flush tables: 1 Open table
s: 3 Queries per second avg: 0.100
--------------
ตัวอย่าง การตรวจสอบ ด้วยคำสั่ง s ใน mysql client บน Linux
QUOTE
mysql Ver 14.7
Distrib 4.1.7, for redhat-linux-gnu (i386)
Connection id: 3
Current database:
Current user: [email protected]
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 4.1.7
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: tis620
Client characterset: tis620
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 5 sec
Threads: 1 Questions: 5 Slow queries: 0 Opens: 11 Flush tables: 1 Open tables: 0 Queries per second avg: 1.000
--------------
Connection id: 3
Current database:
Current user: [email protected]
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 4.1.7
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: tis620
Client characterset: tis620
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 5 sec
Threads: 1 Questions: 5 Slow queries: 0 Opens: 11 Flush tables: 1 Open tables: 0 Queries per second avg: 1.000
--------------
นอกจากนี้เราสามารถใช้ MySQL Client tool อื่นๆ สำหรับตรวจสอบได้เช่นกัน
ตัวอย่างค่า default เริ่มแรก

เมื่อปรับค่า default เป็น tis620

ดังนั้น ตัวแปลดังกล่าว ควรจะมีค่าตังนี้
QUOTE
- character_set_client =
tis620
- character_set_connection = tis620
- character_set_database = tis620
- character_set_results = tis620
- character_set_server = tis620
- character_set_system = utf8
- collation_connection = tis620_thai_ci
- collation_database = tis620_thai_ci
- collation_server = tis620_thai_ci
- character_set_connection = tis620
- character_set_database = tis620
- character_set_results = tis620
- character_set_server = tis620
- character_set_system = utf8
- collation_connection = tis620_thai_ci
- collation_database = tis620_thai_ci
- collation_server = tis620_thai_ci
character set กับ collation ??
character set คือรูปแบบของการจัดเก็บข้อมูล เราสามารถดูรูปแบบที่ MySQL สนับสนุนการใช้งานได้จาก คำสั่ง SHOW CHARACTER SET;
collation คือรูปแบบของการจัดเรียงและเปรียบเทียบ รูปแบบการจัดเรียงที่มักใช้กันบ่อยๆ มักลงท้ายด้วย ci ,cs, bin (เรียงตามลำดับ) เราสามารถดูรายชื่อ collation ที่สนับสนุนได้จาก SHOW COLLATION;
ci, cs, bin ?? มีความหมายดังนี้
ci = case-insensitive จัดเรียงตามตัวอักษร มองตัวอักษรใหญ่ และเล็กมีความสำคัญเท่ากัน โดยปกติมักจะใช้ collation แบบ ci
cs = case sensitive จัดเรียงโดยให้ความสำคัญกับอักษรตัวใหญ่ มากกว่าตัวเล็ก เช่น Z จะมาก่อน a
bin = binary ใช้สำหรับการเปรียบเทียบ
2. บอกให้ mysql รู้ถึงรูปแบบของภาษาที่ต้องการใช้ ผ่าน sql command
เราสามารถใช้คำสั่ง SET เพื่อกำหนดค่าตัวแปลของ MySQL ได้
ดังนั้น ก่อนที่จะ insert, update เราต้องบอกให้ MySQL ทราบถึงรูปแบบของภาษาที่ใช้ ยกตัวอย่างเช่น
CODE
mysql_query("SET NAMES 'tis620'
");
mysql_query("SELECT * FROM TEST");
mysql_query("SELECT * FROM TEST");
(UPDATE - 2006.02.08)
ยังมีอีกวิธีหนึ่งคือ แนบคำสั่งไปกับประโยค SQL เลย เช่น
CODE
mysql_query("SELECT * FROM TEST
ORDER BY idRec COLLATE tis620_thai_ci");
Links
MySQL : Chapter 10. Character Set Support
เมื่ออักษรภาษาไทยกลายเป็น ?????? (phpconcept.com)
บันทึกนี้เขียนที่ GotoKnow โดย Patrickz 2.0 ใน Patrickz - just a developer
ไม่อนุญาตให้แสดงความเห็น
อนุญาตให้แสดงความเห็นได้เฉพาะสมาชิก