ใน MySQL การเปรียบเทียบค่า NULL ด้วยออเปอเรเตอร์ทั่วไป (=, !=, <>) จะคืนค่า UNKNOWN (ไม่ใช่ TRUE/FALSE) ทำให้ไม่ได้ผล ต้องใช้ IS NULL หรือ IS NOT NULL แทน
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล (มี NULL และ Empty String):
mysql> CREATE TABLE DemoTable1455 (Name VARCHAR(20));
mysql> INSERT INTO DemoTable1455 VALUES ('John');
mysql> INSERT INTO DemoTable1455 VALUES (NULL);
mysql> INSERT INTO DemoTable1455 VALUES ('');
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1455; +------+ | Name | +------+ | John | | NULL | | | +------+
ค้นหาที่ไม่ใช่ 'John' หรือ เป็น NULL:
mysql> SELECT * FROM DemoTable1455 WHERE Name <> 'John' OR Name IS NULL;
ผลลัพธ์ (เจอ NULL และ Empty String):
+------+ | Name | +------+ | NULL | | | +------+
ความแตกต่าง NULL vs Empty String
| ค่า | ความหมาย | ตรวจสอบด้วย |
|---|---|---|
| NULL | ไม่มีค่า / ไม่ทราบค่า | IS NULL / IS NOT NULL |
| '' (Empty String) | สตริงว่าง (มีค่า แต่อย่างว่าง) | = '' / <> '' |
| ' ' (Space) | สตริงช่องว่าง | = ' ' / TRIM() = '' |
ฟังก์ชันจัดการ NULL
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| IS NULL | เช็คเป็น NULL | WHERE col IS NULL |
| IS NOT NULL | เช็คไม่เป็น NULL | WHERE col IS NOT NULL |
| IFNULL(expr, val) | คืนค่า val หาก expr เป็น NULL | IFNULL(phone, 'N/A') |
| COALESCE(v1, v2, ...) | คืนค่าแรกที่ไม่เป็น NULL | COALESCE(mobile, home, 'N/A') |
| NULLIF(expr1, expr2) | คืน NULL หาก expr1 = expr2 | NULLIF(end_date, start_date) |
แนวทางปฏิบัติที่ดี
- ใช้
IS NULL/IS NOT NULLเสมอสำหรับเช็ค NULL - หลีกเลี่ยง
col = NULLหรือcol <> NULL(จะไม่ทำงาน) - ใช้
COALESCE()แทนIFNULL()เพื่อความยืดหยุ่น (มาตรฐาน SQL) - กำหนด
DEFAULT NULLหรือNOT NULLตอนสร้างตารางให้ชัดเจน - พิจารณา
SET sql_mode = 'STRICT_TRANS_TABLES'เพื่อจับ Error ตอน INSERT NULL ลง NOT NULL