การเลือกใช้ NULL หรือ Empty String ('') ใน MySQL ขึ้นอยู่กับกรณีการใช้งาน แต่โดยทั่วไป Empty String มักสะดวกกว่า สำหรับการตรวจสอบและเปรียบเทียบ
ความแตกต่างหลัก
| คุณสมบัติ | NULL | Empty String ('') |
|---|---|---|
| ความหมาย | ไม่มีค่า / ไม่ทราบค่า | มีค่าแต่เป็นสตริงว่าง |
| การตรวจสอบ | ต้องใช้ IS NULL / IS NOT NULL | ใช้ = '' / != '' ได้เลย |
| ฟังก์ชัน COUNT() | COUNT(NULL) = 0 | COUNT('') = 1 |
| ฟังก์ชัน LENGTH() | LENGTH(NULL) = NULL | LENGTH('') = 0 |
| การจัดเก็บ | ใช้พื้นที่น้อยกว่า (1 bit ใน NULL bitmap) | ใช้พื้นที่ตามความยาว + overhead |
ตัวอย่างการทดสอบ
-- ตรวจสอบ COUNT
SELECT COUNT(NULL); -- ผลลัพธ์: 0
SELECT COUNT(''); -- ผลลัพธ์: 1
-- ตรวจสอบ LENGTH
SELECT LENGTH(NULL); -- ผลลัพธ์: NULL
SELECT LENGTH(''); -- ผลลัพธ์: 0
แนวทางปฏิบัติที่แนะนำ
- ใช้ NULL เมื่อ: ค่าจริงๆ ไม่มีอยู่ / ไม่ได้กรอก / ไม่ระบุ (เช่น วันเกิดที่ไม่ได้บอก)
- ใช้ Empty String เมื่อ: ค่าอาจจะว่างได้ตามปกติ (เช่น ชื่อเล่นที่ไม่มี)
- หลีกเลี่ยง: ผสมใช้ NULL และ '' ในคอลัมน์เดียวกัน เพราะจะทำให้ Query ซับซ้อน
- Default Value: ตั้งค่า DEFAULT ให้ชัดเจน (DEFAULT NULL หรือ DEFAULT '')
หมายเหตุเพิ่มเติม
ใน Oracle Empty String จะถูกแปลงเป็น NULL อัตโนมัติ แต่ใน MySQL ทั้งสองค่านั้นแยกจากกันชัดเจน