นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 8014
ความเห็น: 4

แก้ไขปัญหาภาษาไทยใน MySQL

หลายๆ คนมีความเข้าใจว่า MySQL ตั้งแต่รุ่น 5.0.x เป็นต้นไป มีปัญหาในการใช้ภาษาไทย ผมทดลองหาวิธีแก้ไขปัญหาไว้เล็กน้อยครับ

ตอนที่จะ upgrade Server ในภาควิชา ก็มีความกังวลกันว่า ต้องเปลี่ยนไปใช้ MySQL Server รุ่นใหม่ๆ ที่หลายๆ คนลือกันว่า มีปัญหาเรื่องภาษาไทย และ database เดิมที่มักจะเขียนด้วย tis-620 (หรือที่หลายคนอาจจะเข้าใจว่า เป็น latin) ซึ่งเป็นรหัสภาษาไทย(character set) ชนิด 8 บิท

มีการสอบถามผู้ที่คาดว่า จะรู้ หรือผู้ที่ดูแลระบบไอที ก็ไม่ค่อยได้รับคำตอบว่า จะแก้ไขปัญหาอย่างไร ส่วนใหญ่ก็แนะนำไปว่า ก็ใช้ MySQL Server รุ่นเดิมไปก่อน

ลองค้นหาใน website ก็พบว่า มีคนเขียนไว้เหมือนกัน แต่อ่านแล้วอ่านอีกก็ไม่เข้าใจถ่องแท้สักทีครับ ลองอ่านดูที่คุณ ต้มยำกุ้ง นำมาให้อ่านดูก็ได้ครับ นั่นก็เป็นตัวอย่างหนึ่งครับ สำหรับผู้ผู้ที่รู้เรื่องเกี่ยวกับ character set และ encoding แล้วก็อาจจะเข้าใจได้ไม่ยาก แต่คนที่ไม่มีพื้นฐานเกี่ยวกับสิ่งเหล่านี้เลย อ่านหลายๆ รอบก็ไม่เข้าใจครับ

ผมลองอ่านดูที่บางคนเขียนไว้ รวมทั้งสอบถามกูรูไอทีบางคนอธิบาย ก็ยังงงๆ เหมือนเดิม สุดท้ายต้องลงมือทำดู จึงได้เข้าใจขึ้นมาบ้าง

ต้องบอกว่า ระหว่างที่ลองทำดูก็ยังมีความเข้าใจที่เป็นการเข้าใจผิดเหมือนกันครับ และที่ผมจะบันทึกไว้ต่อไปนี้ ก็อาจจะไม่ถูกต้องทั้งหมดก็ได้ครับ

ข้อเท็จจริงที่ผมพบ คือ

  1. MySQL Server รุ่นไหนๆ ก็รองรับการใช้ภาษาไทย (รวมทั้งภาษาอื่นๆ ด้วย) โดยเฉพาะรุ่นที่รองรับ character set utf-8 จะมีข้อดีมากๆ คือ สามารถใช้ได้หลายภาษา
  2. ควรเลือกใช้ phpMyAdmin รุ่นประมาณ 2.6.x-2.7.x (ผมไม่แน่ใจว่า รุ่น 2.8-2.9 เป็นอย่างไร แต่รุ่น 2.10-2.11 ควรหลีกเลี่ยงสักพักก่อน)
  3. โดย default แล้ว MySQL Server จะตั้งค่า character set ไว้ค่อนข้างพิลึก หากดูจาก phpMyAdmin ให้คลิกที่ Show MySQL system variables จะพบส่วนที่เกี่ยวกับ character set และ collation (สำหรับการเรียงลำดับ) หลายตัวครับ บางตัวก็เป็น utf8 บางตัวก็เป็น latin1 ส่วนที่เป็นปัญหา คือ ส่วนที่ระบุเป็น latin1 เพราะเป็น character set ที่รองรับรหัสภาษาเพียง 8 บิทเท่านั้น
  4. การแก้ปัญหาก็เลยต้องปรับทุกตัวให้เป็น utf8 เสีย โดยการแก้ไขไฟล์ /etc/mysql/my.cnf ด้วยการเพิ่ม
        default-character-set=utf8
    เข้าไปที section ของ [client] และ [mysqld] จากนั้น ก็ restart ด้วยคำสั่ง sudo /etc/init.d/mysql restart (สำหรับ Ubuntu หรือ Debian) จากนั้น system variables อีกครั้ง จะพบว่า character set เป็น utf8 ทั้งหมด
  5. วิธีการ port ข้อมูลเดิมไปใส่ในฐานข้อมูลบน MySQL Server ตัวใหม่ต้องมีความเข้าใจว่า เดิมฐานข้อมูลใช้ character set ใด และต้องการ port ไปใน Server ตัวใหม่ให้เป็น character set ใด หากเดิมเป็น tis620 และต้องการให้เป็น tis620 เหมือนเดิม ให้ตั้งค่าในข้อ 4 เป็น default-character-set=tis620 แทนที่จะเป็น utf8 ครับ แล้วก็ port ข้อมูลที่ dump ไว้เข้าไป ก็จะไม่มีปัญหาครับ
  6. แต่หากเดิมเป็น tis620 และต้องการแปลงเป็น utf8 ในฐานข้อมูลใหม่ วิธีที่ผมใช้ก็คือ
    • ตั้งค่าในข้อ 4 เป็น default-character-set=utf8
    • แปลง character set ในฐานข้อมูลจาก tis620 เป็น utf8 ด้วยคำสั่ง
          iconv -f tis620 -t utf8 source_file >dest_file
    • จากนั้น ก็ import เข้าฐานข้อมูลใหม่ ก็ใช้ได้เลยครับ

       อีกวิธีที่ไม่ต้องไปยุ่งกับการตั้งค่าใน my.cnf และการมาแปลง character set ในไฟล์เอง ก็คือ บอก mysql client ให้ทราบว่า ไฟล์ต้นทางเป็น character set แบบใด เช่น

สมมติว่า ไฟล์ฐานข้อมูลที่ dump มาชื่อ mydb.sql มี character set เป็น tis620 และเราต้องการ import เข้าไปใน MySQL Server ให้เป็น utf8 เราก็สามารถใช้คำสั่ง mysql ดังนี้
mysql --default-character-set=tis620 mydb <mydb.sql
คำสั่งข้างต้นนี้ได้ละ options บางส่วนไว้ ขึ้นกับการตั้งค่าใน Server ของแต่ละคนครับ

Links ที่อาจจะเป็นประโยชน์

หมวดหมู่บันทึก: เรื่องทั่วไป
คำสำคัญ (keywords): mysql  database  linux  opensource
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ Copyright
สร้าง: 25 กุมภาพันธ์ 2551 10:20 แก้ไข: 24 มีนาคม 2553 20:20 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

Ico48
Kon1Kon (ความเคลื่อนไหวล่าสุด)
25 กุมภาพันธ์ 2551 14:11
#22059

อาจารย์เปลี่ยนรูปแล้ว..รูปนี้ดูดีค่ะ เห็นหน้าชัดดี..

Ico48
panyarak (ความเคลื่อนไหวล่าสุด)
25 กุมภาพันธ์ 2551 15:54
#22095

 ครับ

รูปเดิมมันดูทึมๆ (ไม่ใช่ทึ่มๆ นะครับ)ไปหน่อยครับ.... 

 

Ico48
นพ [IP: 58.9.223.82]
12 กรกฎาคม 2551 17:21
#32185
อ่านแล้วดูดีมีประโยชน์มากเลยครับ
ขอบคุณครับ ผมได้เพิ่ม links ของ blog ที่บางคนเคยเขียนไว้ด้วย (เพิ่งจะพบ) และอาจจะเป็นประโยชน์

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.227.3.146
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ