วิธีแปลงฐานข้อมูล latin1 เป็น utf8mb4 บน WordPress

สืบเนื่องจาก WordPress เวอร์ชั่นเก่าๆ จะใช้การเข้ารหัสฐานข้อมูลแบบ latin1 เพื่อให้เก็บอักขระได้ครบถ้วน ต่างจาก utf8 ในยุคแรกที่มีปัญหากับ emoji หรือบางตัวอักษร ทำให้ต่อมาเกิดเป็น utf8mb4 ที่เก็บข้อมูลได้ครบถ้วน แต่ปัญหาคือเราจะแปลงฐานข้อมูลยังไงไม่ให้มันพัง

ก่อนจะทำอะไรอย่าลืม Backup

ขั้นแรกที่ต้องทำคือการ Backup ฐานข้อมูล ซึ่งควรทำด้วยการ Backup ผ่านการ Export จากระบบจัดการฐานข้อมูลจริงๆ เช่น Plug in WP Migrate DB หรือทำผ่าน Adminer หรือ PHPMyAdmin หรือตัวไหนก็ได้ที่จัดการกับฐานข้อมูลโดยตรง แต่ไม่ควรทำผ่านตัวช่วย Backup เช่น All-in-One WP Migration หรือ Updraft Plus เพราะจะมีการบีบอัดไฟล์และอาจทำให้ตัวอักษรในฐานข้อมูลผิดเพี้ยน

เริ่มทำการแปลงฐานข้อมูลเป็น utf8mb4

อย่างที่เกริ่นไปตอนต้นว่าการเข้ารหัสฐานข้อมูลของ WordPress จะนิยมอยู่ 3 แบบ

  • โดยยุคแรกจะเป็น latin1 ที่เก็บข้อมูลและแสดงผลไม่ผิดเพี้ยน แต่ตัวภาษาไทยในฐานข้อมูลจะอ่านไม่ออกและเป็นภาษาต่างดาวมั่วๆ
  • ยุคถัดมานิยม utf8 ที่ไม่มีปัญหากับภาษาทั่วไป ตัวอักษรในฐานข้อมูลไม่ผิดเพี้ยน แต่เก็บอักขระไม่ครบถ้วน ทำให้ emoji หรือบางอักษรเพี้ยน
  • ล่าสุดใช้ utf8mb4 ที่แก้ปัญหาข้างต้นได้หมดแล้ว

วิธีแปลงฐานข้อมูลที่ผมลองแล้วได้ผลดีที่สุดคือ ใช้สคริป PHP รันเพื่อแปลงฐานข้อมูล โดยโหลดสคริปจาก github จากนั้นทำการแตกไฟล์แล้วแก้ส่วนของ $user , $password และ database1 ให้เป็นข้อมูลของเรา

วิธีแปลงฐานข้อมูล latin1 เป็น utf8mb4 บน WordPress 3

เสร็จแล้วก็โยนขึ้นไปบนเว็บของเรา และทำการเรียก url ของไฟล์นี้ เช่น xoxxax.com/convert_latin1_data_in_a_utf8_mysql_database_to_utf8mb4.php จากนั้นก็รอจนกว่าจะเสร็จ ซึ่งระหว่างที่มันทำการแปลงค่าก็จะไม่มีการแสดงผลใดๆ แต่ถ้าเสร็จเรียบร้อยหรือติด error ก็จะมีข้อความบอก

เปลี่ยน wp-config ให้แสดงผลถูกต้อง

ในกรณีที่เว็บยังแสดงผลเป็นภาษาต่างดาวหลังจากแปลงฐานข้อมูล ให้เข้าไปแก้ wp-config.php ในส่วนของ DB_CHARSET และ DB_COLLATE ให้เป็น utf8 หรือ utf8mb4 เป็นอันเสร็จสิ้นครับ