Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ลบอักขระที่แปลงเป็น ASCII ไม่ได้ใน MySQL ด้วย CONVERT และ REPLACE

เมื่อข้อมูลมีอักขระพิเศษที่แปลงเป็น 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)

คำอธิบาย:

  1. CONVERT(Value USING ASCII) พยายามแปลงเป็น ASCII อักขระที่แปลงไม่ได้จะกลายเป็น '?'
  2. REPLACE(..., '?', '') ลบเครื่องหมาย ? ทั้งหมดออก

ข้อควรระวัง: วิธีนี้จะลบ '?' ที่เป็นข้อมูลจริงด้วย (False positive) หากข้อมูลมีเครื่องหมาย ? อยู่แล้ว แนะนำใช้ REGEXP กรองเฉพาะอักขระที่ต้องการเก็บแทน