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

ServiceMan
Ico64
Sathaya Bunratchoo
Engineer
Scientific Equipment Center, PSU
เครือข่าย
สมาชิก · ติดตาม: 3 · ผู้ติดตาม: 2

อ่าน: 3157
ความเห็น: 2

CentOS 6.4 กับ MySQL ภาษาไทย

CentOS 6.4 กับ MySQL ภาษาไทย

    ผมปล้ำอยู่กับการติดตั้ง OS ตัวใหม่สำหรับ Server สำรองอีกตัว ซึ่งได้มาไม่นาน ตอนแรกจะใช้ Fedora 8 ตัวเดิมที่เคยใช้อยู่พยายามติดตั้งก็พบว่าติดตั้งได้แต่ผมไม่สามารถติดตั้ง Ethernet driver ได้สำเร็จ ถึงจะไม่สำเร็จก็ไม่เป็นไรเพราะตั้งใจไว้แล้วว่าจะเปลี่ยนไปใช้ CentOS ตัวล่าสุดดีกว่า ของใหม่น่าจะมีเสถียรภาพที่ดีกว่า

   ปัญหาเดียวที่พบสำหรับ CentOS 6.4 คือส่วนของฐานข้อมูล MySQL ซึ่งต้องย้ายมาจากเครื่องเก่าและสามารถใช้งานได้ในทันที ผมพบว่ามันมีอยู่ 2 แนวทาง นั่นคือ Server รุ่นใหม่ๆ เขาหันไปใช้การเข้ารหัสกันแบบ UTF-8 กันหมดแล้ว ในขณะที่ของเก่าใช้ latin1 อยู่ เราอาจจะเข้าใจผิดคิดว่า MySQL เข้ารหัสแบบ TIS-620 จริงๆ แล้วคือ latin1

    ทดลองโดยการดึงฐานข้อมูลออกมาโดยใช้ MySQL Front 2.2 และ 5.3 พบว่า 2.2 จะแสดงภาษาไทยได้แต่ 5.3 ไม่แสดง แต่ปัญหาคือ MySQL Front 2.2 ไม่สามารถใช้ได้กับ MySQL 5.3 ซึ่งใช้ใน CentOS 6.4 หลังจากดึงฐานข้อมูลออกมาแล้วก็ใช้วิธีการดังนี้ครับ

   หากต้องการใช้ UTF-8 ให้แยกระหว่างโครงสร้างและข้อมูลและดึงข้อมูลโดยใช้ MySQL Front 2.2 จากนั้นใส่กลับเข้าไปที่ MySQL 5.3 โดยขั้นแรกให้ใส่กลับแค่โครงสร้างก่อน และแก้ไข charset เป็น utf8_general_ci จากนั้นจึงจะนำข้อมูลกลับเข้าไปได้ แบบนี้เราจะสามารถใช้ MySQL Front 5.3 และอ่านภาษาไทยได้ หรือจะใช้ phpMyAdmin ก็ได้เช่นกัน แต่ปัญหาจะเกิดกับ code php ที่เขียนไว้ต้องทำการแก้เล็กน้อยเพื่อให้อ่านและแสดงภาษาไทยได้ อันนี้ค่อยว่ากันอีกทีครับ ยังลองและทดสอบได้ไม่สมบูรณ์ (ได้ภาษาไทยในบางส่วน แต่บางส่วนกลับอ่านไม่ออก งง)

   หากต้องการใช้การเข้ารหัสแบบเดิม ซึ่งก็คือ latin1 (TIS-620) อันนี้ไม่ยากครับ ดึงฐานข้อมูลทั้งโครงสร้างและข้อมูลด้วย MySQL Front 5.3 และใส่กลับเข้าไปใน MySQL 5.3 ด้วย MySQL Front 5.3 เช่นเดิม ซึ่งไม่ต้องสนใจครับ MySQL Front 5.3 จะแสดงข้อความภาษาไทยที่อ่านไม่ออก แต่ Code php เดิมสามารถแสดงภาษาไทยได้ถูกต้องเหมือนเดิม หากไม่ถูกต้องแต่สามารถเลือก Charecter Encoding เป็น TIS-620 และสามารถอ่านเ็ป็นภาษาไทยได้ ให้เข้าไปแก้ที่ /etc/httpd/conf/httpd.conf แก้ไข default charset UTF-8 เป็น TIS-620 ก็จะแก้ปัญหาได้

   ผมเลือกใช้แบบหลังคือ latin1 ไปพลางๆ ก่อนเพราะกระทบต่อ php ไม่มากหากเปลี่ยนไปใช้ utf8 เลย ท่าน iHum คงจะยุ่งกับการแก้โปรแกรมแน่ๆ แต่เราตั้งใจว่าจะย้ายไปใช้ utf8 ในอนาคต ซึ่ง คงต้องค่อยเป็นค่อยไปครับ :)

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 17 กรกฎาคม 2556 19:25 แก้ไข: 17 กรกฎาคม 2556 19:25 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 Our Shangri-La, Ico24 iHum, และ 5 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ปัญหาหลัก ๆ น่าจะเป็นที่การ query ข้อมูลมาจากฐานข้อมูลครับ query ข้อมูลมาแล้วข้อมูลนั้นถูกเข้ารหัส (encode) แบบใดอยู่ php code เพียงแต่สั่งให้แสดงผลลัพธ์นั้น

ผมเห็นเขาแก้ปัญหาตรงนี้ด้วยการกำหนดการเข้ารหัส (encode) เอาไว้ตอน connect กับฐานข้อมูล (กำหนดไว้ใน config เช่น connection.conf) แต่เท่าที่เคยลอง ถ้าเราใช้ cms เป็นโครงของเวป แม้จะกำหนดใน config file การแสดงผลยังมีปัญหาในบางส่วน ซึ่งผมเดาเอาว่าเป็นความซับซ้อนของตัว code cms เอง ที่อาจจะไปกำหนดค่าบางอย่างไว้ไม่เหมือนกันทุกส่วน

ถ้าเป็นการเขียน code เองก็ไม่น่าจะมีปัญหา

ปัญหาอีกอันคือ php code นั้นได้กำหนดวิธีการเข้ารหัส (encode) ตัวอักษรไว้ด้วยหรือไม่

การกำหนดค่า default ในแฟ้มข้อมูล httpd.conf ให้แสดงผลเป็น tis-620 นั้นเนื่องจากหน้าเวปที่แสดงผลถูกเข้ารหัสเป็น tis-620 ไว้ หากกำหนด default เป็นอย่างอื่น (เช่น utf-8) การแสดงผลหน้าเวปก็จะเป็นภาษาต่างดาวไป เลยต้องกำหนดค่า default ให้เป็น tis-620

ยกเว้นผู้ใช้ไปกำหนดการแสดงผลใน browser ของตัวเองให้เป็น tis-620 แต่ส่วนมากเมื่อผู้ให้เห็นภาษาต่างดาวมือไม้อ่อนกันหมดแล้ว แบบว่าแพ้ทาง เหมือนงูแพ้เชือกกล้วย

อิอิอิ

ถ้าในฐานข้อมูลเปลี่ยนเป็น utf-8 แล้ว เมื่อ query ข้อมูลมาแสดงผล ปรากฏว่าเพี้ยน ๆ ก็น่าจะอยู่ที่ php code ของเวปนะครับ

อิอิอิ

เราเอง

@ ท่านพี่ Shang

ลองแล้วครับใช้ mysql_db_query($dbname,"SET NAMES UTF8");

อ่านไทยได้แต่ไม่ทั้งหมด ต้องมางม Code อีกรอบว่าเป็นตรงไหนอีก ประมาณว่า หนึ่งหน้ามีภาษาไทยปนกับต่างด้าว

แต่หากใช้ latin1 ตั้งแต่แรกก็ไม่เป็นปัญหา ทั้งหมดอ่านเป็นไทยได้ถูกต้อง :)

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

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