ปัญหาภาษาไทยกับ กับ Mysql


วิธีแก้ 1 กำหนด Database ให้ใช้ tis620

แก้ไขไฟล์ config ของ MySQL โดยการกำหนดค่าดังนี้
CODE
[mysqld]
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:           root@localhost
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:           root@localhost
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 เริ่มแรก
user posted image

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



ดังนั้น ตัวแปลดังกล่าว ควรจะมีค่าตังนี้
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 กับ 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");



(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)
คำสำคัญ (Tags): #database#php
หมายเลขบันทึก: 18859เขียนเมื่อ 14 มีนาคม 2006 15:15 น. ()แก้ไขเมื่อ 22 มิถุนายน 2012 11:33 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท