เวียนหัวกับการแปลงค่า UTF-8

หลายวันมานี้ผมกำลังสร้างซอฟต์แวร์ตัวใหม่อยู่ครับ ซึ่งจำเป็นที่จะต้องใช้ฐานข้อมูล MySQL ในการเก็บค่าคงที่ต่าง ๆ รวมถึงตารางเทียบค่า เพื่อไว้เทียบค่าหลาย ๆ อย่างด้วย

ทีนี้ไอ้เจ้าซอฟต์แวร์ที่จะทำแล้วเอามาวางไว้บนพี่ไท้.คอมตัวนี้เนี่ย ผมต้องการให้แสดงผลเป็นภาษาไทย แล้วก็อยากให้เข้ารหัสเป็น UTF-8 ด้วย ก็เลยวุ่นวายน่าดูครับ โดยเฉพาะตอน Import / Export ข้อมูลเข้า ๆ ออก ๆ ฐานข้อมูล

ผมเสียเวลาทดลองมาหลายวันครับ คิดว่าพอจะรู้วิธีแล้วว่าต้องทำไงบ้าง มันแย่หน่อยนะครับที่ข้อมูลที่เราเตรียมเอาไว้มันเป็น ASCII ซึ่งระบบมองว่ามันเป็นการเข้ารหัส TIS-620 แต่พอเรา Import เข้าไปแล้ว มันดันไม่แปลงให้เป็น UTF-8 ซะนี่ ต้องมา Export ใหม่อีกครั้งนึงถึงจะได้เป็น UTF-8 ออกมา

โดยวิธีการที่ผมทำ ผมทำแบบนี้ครับ

  1. สร้างข้อมูลเอาไว้ใน Microsoft Excel ครับ ไฟล์นึงมีหลายเรคคอร์ด เรคคอร์ดนึงมีหลายฟิลด์
  2. Export จาก Excel มาเป็น Text File ครับ
  3. ใช้ phpMyAdmin – 2.8.2.4 เป็นตัว Import เข้าฐานข้อมูล โดยเลือกว่าจะ Import รหัสแบบ TIS-620
  4. จากนั้นใช้ phpMyAdmin – 2.8.2.4 ทำการ Export สคริปต์ SQL ออกจากฐานข้อมูลมาไว้เป็น Text File เราก็จะได้ทั้งคำสั่งสร้างตาราง และคำสั่งบรรจุข้อมูล ซึ่งถ้าข้อมูลเป็นภาษาไทยก็จะถูกเข้ารหัสไว้เรียบร้อยแล้ว
  5. แล้วก็ Drop ทุกตารางในฐานข้อมูลทิ้ง เพราะเดี๋ยวจะทำทุกอย่างใหม่
  6. จากนั้นใช้ phpMyAdmin 2.5.7-pl1 ทำการ Import สคริปต์ SQL จากข้อ 4. ใส่เข้าไปครับ ทีนี้ก็เรียบร้อยครับ เราจะได้ตารางข้อมูลที่บรรจุข้อมูลภาษาไทยซึ่งเข้ารหัสแบบ UTF-8 ครับ

พอทำครบทุกขั้นตอนแล้ว ไม่ว่าเราจะเปิดข้อมูลในตารางดูด้วย phpMyAdmin 2.5.7-pl1 หรือ phpMyAdmin – 2.8.2.4 หรือแม้กระทั่งเขียนโปรแกรมด้วย PHP ให้อ่านข้อมูลจากตารางข้อมูลมาแสดงผล ภาษาไทยของเราก็จะสอดคล้องกับรหัส UTF-8 ครับ

จุดที่แตกต่างของ phpMyAdmin ทั้งสองรุ่นก็คือ

  1. รุ่น 2.5.7-pl1 จะสนับสนุนรหัสตาม Locale Setting ของเครื่องเราครับ พอดีเครื่องผมกำหนดไว้ว่าเป็นภาษาไทย มันก็เลยเข้ารหัสทุกหน้าจอของมันให้เป็น TIS-620 หรือเรียกอีกอย่างนึงว่า Thai (Windows) ครับ
  2. รุ่น 2.8.2.4 จะสนับสนุนรหัส UTF-8 เท่านั้นครับ มันจะไม่สนใจเลยว่าเครื่องของเรากำหนดเป็นภาษาท้องถิ่นอะไรไว้ มันจะเข้ารหัสเป็น UTF-8 เพียงอย่างเดียว

ผมก็เลยอาศัยจุดแตกต่างของทั้งสองรุ่น มาแปลงไปแปลงมาข้อมูลภาษาไทยของผมซะเลย

Related Posts

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *