เมื่อข้อมูลมีอักขระพิเศษที่แปลงเป็น ASCII ไม่ได้ (เช่น €, §) จะกลายเป็น '?' ตอนแปลง สามารถใช้ CONVERT(... USING ASCII) แล้ว REPLACE ลบเครื่องหมาย ? ออกไป
ตัวอย่างการสร้างตาราง
mysql> create table DemoTable (
Value varchar(100) );
Query OK, 0 rows affected (0.57 sec)
เพิ่มข้อมูลมีอักขระพิเศษ
mysql> insert into DemoTable values('€986');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('§97');
Query OK, 1 row affected (0.15 sec)
แสดงข้อมูลต้นฉบับ
mysql> select * from DemoTable;
+--------+ | Value | +--------+ | €986 | | §97 | +--------+ 2 rows in set (0.00 sec)
คำสั่งแปลง ASCII แล้วลบ ?
mysql> select replace(convert(Value using ascii), '?', '') from DemoTable;
ผลลัพธ์ (เหลือแค่ตัวเลข)
+--------------------------------------------+ | replace(convert(Value using ascii), '?', '') | +--------------------------------------------+ | 986 | | 97 | +--------------------------------------------+ 2 rows in set (0.00 sec)
คำอธิบาย:
CONVERT(Value USING ASCII)พยายามแปลงเป็น ASCII อักขระที่แปลงไม่ได้จะกลายเป็น '?'REPLACE(..., '?', '')ลบเครื่องหมาย ? ทั้งหมดออก
ข้อควรระวัง: วิธีนี้จะลบ '?' ที่เป็นข้อมูลจริงด้วย (False positive) หากข้อมูลมีเครื่องหมาย ? อยู่แล้ว แนะนำใช้ REGEXP กรองเฉพาะอักขระที่ต้องการเก็บแทน