MySQL การใช้งานฟังก์ชัน CONVERT()

ฟังก์ชัน CONVERT() ใน MySQL ใช้เพื่อแปลงค่าหรือชนิดข้อมูล (data type) และ character set ของข้อมูล ตามที่ระบุไว้

โดย CONVERT() มี 2 รูปแบบหลัก คือ

  1. แปลงชนิดข้อมูล เช่น แปลงจาก STRING เป็น DATE, FLOAT เป็น CHAR, หรือ DECIMAL เป็น SIGNED
  2. แปลง character set เช่น แปลงข้อความจาก utf8mb4 ไปเป็น latin1

ฟังก์ชันนี้เหมาะสำหรับกรณีที่ต้องการควบคุมการเปลี่ยนชนิดข้อมูลหรือแปลง encoding ข้อมูล เพื่อให้รองรับกับระบบหรือฐานข้อมูลที่ต่างกัน

ประโยชน์ของฟังก์ชัน CONVERT()

  • แปลงค่าจากชนิดข้อมูลหนึ่งไปเป็นอีกชนิดข้อมูลหนึ่ง (เหมือน CAST())
  • แปลงข้อความจาก character set หนึ่งเป็นอีกแบบหนึ่ง (เช่น utf8mb4 เป็น latin1)
  • ใช้ป้องกันปัญหาการแสดงผลอักขระผิดพลาดเมื่อนำข้อมูลไปใช้กับระบบอื่น
  • ใช้ในการทำงานร่วมกับฐานข้อมูลที่ใช้ encoding แตกต่างกัน
  • เหมาะกับงานแปลงข้อมูลจำนวนมากที่ต้องการความแม่นยำด้านชนิดข้อมูลหรือ character set

รูปแบบการใช้งาน

แบบที่ 1 แปลงชนิดข้อมูล

CONVERT(expression, data_type)
  • expression คือค่าที่ต้องการแปลง
  • data_type คือชนิดข้อมูลปลายทาง เช่น CHAR, DATE, SIGNED, DECIMAL ฯลฯ

แบบที่ 2 แปลง character set

CONVERT(string USING character_set)
  • string คือข้อความที่ต้องการแปลง encoding
  • character_set คือชื่อ character set เช่น utf8mb4, latin1, tis620

ตัวอย่างการใช้งาน

แปลงชนิดข้อมูล

SQL
SELECT CONVERT(123.45, CHAR) AS converted_string;
-- ผลลัพธ์: '123.45'

แปลง character set

SQL
SELECT CONVERT('ทดสอบ' USING latin1) AS converted_text;
  • อาจได้ข้อความที่ผิดเพี้ยนหาก character ไม่รองรับใน target encoding

สมมติว่ามีตารางชื่อ customers ซึ่งเก็บข้อมูลดังนี้

customer_id full_name birth_year
1นายสมชาย1980
2นางสาววารินทร์1992
3John Smith1975

แปลง birth_year เป็น CHAR และชื่อให้เป็น latin1

SQL
SELECT customer_id,
       CONVERT(birth_year, CHAR) AS birth_str,
       CONVERT(full_name USING latin1) AS name_latin1
FROM customers;
  • หากฐานข้อมูลเดิมใช้ utf8mb4 การแปลงเป็น latin1 อาจทำให้ภาษาไทยแสดงผิด

หมายเหตุ

  • หาก character set ปลายทางไม่รองรับอักขระต้นทาง (เช่น ภาษาไทย แปลงเป็น latin1) จะทำให้ข้อมูลเพี้ยนหรือกลายเป็น ?
  • ฟังก์ชัน CONVERT(expr, type) และ CAST(expr AS type) ทำหน้าที่เหมือนกันในการแปลงชนิดข้อมูล
  • การแปลง character set ไม่ได้เปลี่ยนข้อมูลในฐานข้อมูลจริง เว้นแต่นำไป INSERT ใหม่
  • ข้อมูลที่แปลงแล้วอาจต้องถูกแปลงกลับก่อนนำไปใช้ต่อ เพื่อให้ถูกต้องตามระบบที่รองรับ
แชร์เรื่องนี้