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

แปลงค่าว่าง (Blank/Empty) เป็น NULL ใน MySQL ด้วย UPDATE และ LENGTH

ใน MySQL ค่าว่าง ('') และ NULL แตกต่างกัน หากข้อมูลมีทั้งค่าว่างและ NULL ปนกัน สามารถทำให้สอดคล้องโดยแปลงค่าว่าง (และ Space-only) เป็น NULL ด้วย UPDATE

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

สร้างตารางและเพิ่มข้อมูล (มี Empty string, Space, NULL):

mysql> create table DemoTable1362 (ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY, ClientName varchar(40));
mysql> insert into DemoTable1362(ClientName) values('Chris'),(' '),('Bob'),(' '),('David'),(NULL);

ข้อมูลก่อนแปลง:

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1        | Chris      |
| 2        |            |  -- Space
| 3        | Bob        |
| 4        |            |  -- Space
| 5        | David      |
| 6        | NULL       |
+----------+------------+

คำสั่งแปลง Empty string และ Space-only เป็น NULL

mysql> update DemoTable1362 set ClientName=NULL where ClientName='' or length(ClientName)=0;

ผลลัพธ์หลังแปลง (Space-only ก็กลายเป็น NULL)

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1        | Chris      |
| 2        | NULL       |
| 3        | Bob        |
| 4        | NULL       |
| 5        | David      |
| 6        | NULL       |
+----------+------------+

คำอธิบาย:

  • ClientName='' จับ Empty string (Zero-length)
  • LENGTH(ClientName)=0 จับทั้ง Empty string และ String ที่เป็น Space เท่านั้น (เพราะ LENGTH นับ Byte, Space = 1 byte) — ข้อผิดพลาดในตัวอย่างต้นฉบับ: LENGTH(' ') = 1 ไม่ใช่ 0 ควรใช้ TRIM(ClientName) = '' หรือ LENGTH(TRIM(ClientName)) = 0 แทน
  • วิธีที่ถูกต้องกว่า: WHERE TRIM(ClientName) = '' OR ClientName IS NULL (แต่ IS NULL อยู่แล้ว)
  • หลัง UPDATE ค่าที่เป็น Space จะกลายเป็น NULL จริง