ใน 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 จริง