การเปลี่ยน Collation ใน MySQL

ในบางครั่้งถ้าเราทำการ migrate database จาก database ยี่ห้ออื่น เช่น Microsoft SQL Server หรือ Oracle ค่า Collation ที่เราได้อาจไม่ใช่ utf-8 อย่างที่เราต้องการ(ขึ้นอยู่กับ Tool ที่ใช้ในการ convert หรืออาจลืมกำหนด Collation ก่อนที่จะทำการ Convert) รวมทั้งกรณีที่เราอยากจะเปลี่ยน collation ระหว่างทาง เนื่องจากปัญหาเรื่องการ sorting หรือ searching ด้วย

เราสามารถใช้ SQL command ในการเปลี่ยนค่า Collation โดยไม่ต้องใช้ Tool อย่าง PhpMyadmin, Navicat หรือ MySQL workbench เข้าไปเปลี่ยนค่า Collation ของแต่ละ column ทีละตัว โดยเราจะใช้คำสั่ง

หลังจากที่เรา run sql command นี้ทุก columns ของเราจะถูกเปลี่ยน collation เป็น utf8_general_ci ทั้งหมด

แต่ถ้าในกรณีที่ต้องการเปลี่ยน collation ของทุกๆ table ใน database เราต้องทำการเขียน Code(อาจเป็น PHP) เพื่อดึงรายชื่อ table ทั้งหมดออกมา แล้วก็ run query ด้านบนทุกรอบโดยเปลี่ยน ชื่อ table ไปเรื่อยๆจนครบทุก table ตามตัวอย่างด้านล่าง

แต่ code นี้จะใช้กับ php 7 ไม่ได้เนื่องจากใน php 7 จะไม่ support mysql_connect อีกต่อไป

ตัวอย่าง code เอามาจาก http://stackoverflow.com/questions/1294117/how-to-change-collation-of-database-table-column