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

วิธีอัปเดต Empty String ให้เป็น NULL ใน MySQL

การแปลง Empty String ('') ให้เป็น NULL ด้วย LENGTH() และ UPDATE

ใช้ LENGTH() ตรวจสอบความยาวสตริง หากเป็น 0 แสดงว่าเป็น Empty String แล้วค่อย SET ให้เป็น NULL

รูปแบบคำสั่ง

UPDATE table_name SET column_name = NULL WHERE LENGTH(column_name) = 0;

ตัวอย่าง: แปลงชื่อที่เป็น Empty String ให้เป็น NULL

1. สร้างตารางและเพิ่มข้อมูล (มี Empty String)

CREATE TABLE DemoTable (Name VARCHAR(50));
INSERT INTO DemoTable VALUES ('Chris'), (''), ('David'), ('');

2. ดูข้อมูลก่อนอัปเดต

SELECT * FROM DemoTable;

ผลลัพธ์: แถวที่ 2 และ 4 เป็น Empty String (แสดงว่าง)

+-------+
| Name  |
+-------+
| Chris |
|       |
| David |
|       |
+-------+

3. อัปเดต Empty String ให้เป็น NULL

UPDATE DemoTable SET Name = NULL WHERE LENGTH(Name) = 0;

ผลลัพธ์การรัน: Query OK, 2 rows affected (0.12 sec) Rows matched: 2 Changed: 2 Warnings: 0

4. ตรวจสอบหลังอัปเดต

SELECT * FROM DemoTable;

ผลลัพธ์:

+-------+
| Name  |
+-------+
| Chris |
| NULL  |
| David |
| NULL  |
+-------+

วิธีอื่น: ใช้ NULLIF() (สั้นกว่าและมาตรฐาน)

UPDATE DemoTable SET Name = NULLIF(Name, '');

NULLIF(expr1, expr2) คืนค่า NULL หาก expr1 = expr2 มิฉะนั้นคืนค่า expr1

วิธีนี้ทำงานได้ในคำสั่งเดียว ไม่ต้องใช้ WHERE

ความแตกต่าง: Empty String vs NULL

ลักษณะEmpty String ('')NULL
LENGTH()0NULL
IS NULLFALSETRUE
= ''TRUEUNKNOWN (ไม่ใช่ TRUE)
COUNT(col)นับไม่นับ
CONCATต่อได้ปกติคืน NULL

ข้อดีของการใช้ NULL แทน Empty String

  • Semantic correctness: "ไม่มีค่า" vs "มีค่าว่าง"
  • COUNT(column) ไม่นับ NULL → 统计准确
  • UNIQUE Index อนุญาต NULL หลายค่า (ในบาง Engine) แต่ Empty String ถือซ้ำ
  • Function เหล่านี้จัดการ NULL ได้ดี: COALESCE, IFNULL, NULLIF

ป้องกัน Empty String ตอน INSERT

-- ใช้ Trigger
CREATE TRIGGER before_insert_demo 
BEFORE INSERT ON DemoTable 
FOR EACH ROW 
SET NEW.Name = NULLIF(TRIM(NEW.Name), '');