ฟังก์ชัน CONVERT() ใน MySQL ใช้เพื่อแปลงค่าหรือชนิดข้อมูล (data type) และ character set ของข้อมูล ตามที่ระบุไว้
โดย CONVERT() มี 2 รูปแบบหลัก คือ
- แปลงชนิดข้อมูล เช่น แปลงจาก
STRINGเป็นDATE,FLOATเป็นCHAR, หรือDECIMALเป็นSIGNED - แปลง 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คือข้อความที่ต้องการแปลง encodingcharacter_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 |
| 3 | John Smith | 1975 |
แปลง 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ใหม่ - ข้อมูลที่แปลงแล้วอาจต้องถูกแปลงกลับก่อนนำไปใช้ต่อ เพื่อให้ถูกต้องตามระบบที่รองรับ