บันทึก Emoji ด้วย MySQL ได้ทั้งใน iOS และ Android

บันทึก Emoji ด้วย MySQL ได้ทั้งใน iOS และ Android



บันทึก Emoji ด้วย MySQL ได้ทั้งใน iOS และ Android

สังเกตุไหมครับว่า keyboard บนมือถือทั้ง iOS และ Android จะมีปุ่ม emoji ที่เราสามารถใส่ไอคอนเวลาพิมพ์ข้อความได้สำหรับ Web Developer ที่ต้องทำเว็บไซต์ให้รองรับการแสดงผลบนอุปกรณ์สมาร์ทโฟนแล้ว อีกอย่างหนึ่งที่มักจะเป็นปัญหาคือ ลูกเล่นต่าง ๆ ที่ติดมากับคีย์บอร์ดของมือถือ เช่น ระบบ emoji หรือ emoticon ที่มีทั้งบน iOS และ Android สำหรับเว็บไซต์ที่มีฟังก์ชั่นรับ input ผ่าน keyboard เช่นการตั้งกระทู้หรือการ comment จะต้องทำเว็บไซต์ให้สามารถบันทึกไอคอนเหล่านี้ลงในฐานข้อมูลได้ด้วย


ปัญหาที่เจอคือเมื่อเราใส่ emoji เข้าไปใน input หรือ textarea และส่งค่าไปบันทึกในฐานข้อมูล ตัวฐานข้อมูลจะไม่สามารถบันทึกได้คือจะแสดงเป็นข้อมูลว่าง ๆ



ซึ่งโดยปกติเราก็จะสร้างตารางฐานข้อมูลโดยกำหนด Character set เป็น UTF8 และ callation เป็น UTF8_general_ci หรือ UTF8_unicode_ci เพื่อให้รองรับภาษาไทย แต่ถ้าจำเป็นต้องบันทึกข้อมูลที่มีอักขระอยู่ในรูปแบบ emoji เราจะเป็นจะต้องปรับจาก utf8 ธรรมดาเป็น utf8mb4 เพื่อให้รองรับอักขระพิเศษหลากหลายภาษา ลองมาตั้งค่าฐานข้อมูลให้รองรับการบันทึกข้อมูล emoji กันครับ

วิธีตั้งค่า MySQL ให้รองรับ Emoji

  • 1. ใช้คำสั่ง MySQL ตั้งค่า CHAR SET และ CALLATION ของฐานข้อมูลให้เป็นแบบ utf8mb4 ดังนี้
    ALTER DATABASE  `database_name` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
  • 2. ใช้คำสั่ง MySQL ตั้งค่า CHAR SET และ CALLATION ของตารางฐานข้อมูลให้เป็นแบบ utf8mb4 ดังนี้
    ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
  • 3. ใช้คำสั่ง MySQL ตั้งค่า CHAR SET และ CALLATION ของ column ในฐานข้อมูลให้เป็นแบบ utf8mb4 ดังนี้
    ALTER TABLE  `table_name` MODIFY  `column_name` VARCHAR( 200 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
  • 4. เมื่อมีการ connect กับฐานข้อมูลให้ใช้คำสั่ง ดังนี้
    mysql_query("SET NAMES utf8mb4");

สำหรับ codeigniter framework ให้ไปตั้งค่าที่ config.php ดังนี้

'char_set' => 'utf8mb4',
'dbcollat' => 'utf8mb4_general_ci',

สุดท้ายอย่าลืมตั้งค่าในส่วนของ meta tag charset ให้เป็นแบบ utf8

<meta http-equiv=Content-Type content="text/html; charset=utf-8">

เพียงเท่านี้เราก็จะสามารถใช้งานภาษาไทยและ emoji บนคีย์บอร์ดของทั้ง iOS และ Android ได้แล้วครับ