ความเข้าใจผิดระหว่าง Null และ 0 เป็นเรื่องคลาสสิกที่สร้างบั๊กในโปรแกรมมานักต่อนัก แม้ทั้งคู่จะดูเหมือน “ความว่างเปล่า” ในสายตาคนทั่วไป แต่ในโลกของคอมพิวเตอร์และฐานข้อมูล ทั้งสองอย่างนี้ทำหน้าที่ต่างกันอย่างสิ้นเชิงครับ
เพื่อให้เห็นภาพชัดเจนที่สุด เรามาดูความแตกต่างผ่านมุมมองต่าง ๆ กันครับ
นิยามทางแนวคิด
- 0 : คือ “ค่า” ตัวเลขที่มีอยู่จริง มันคือปริมาณที่วัดได้ว่ามีค่าเป็นศูนย์
- Null: คือ “การไม่มีค่า” หรือความไม่แน่นอน มันคือสถานะที่บอกว่า “เรายังไม่รู้ว่าค่านี้คืออะไร” หรือ “ข้อมูลนี้ไม่ได้ถูกกรอกลงไป”
การเปรียบเทียบเชิงเทคนิค
| คุณสมบัติ | 0 | Null |
| ประเภทข้อมูล | ตัวเลข | สถานะพิเศษ |
| พื้นที่ในหน่วยความจำ | จองพื้นที่เพื่อเก็บเลข 0 | มักจะเป็น Pointer ที่ชี้ไปที่ความว่างเปล่า |
| การคำนวณ | $5 + 0 = 5$ | $5 + \text{Null} = \text{Null}$ |
| ความหมาย | มีค่าเป็นศูนย์ | ไม่รู้ว่าค่าคืออะไร |
แมวของชโรดิงเจอร์
แมวของชโรดิงเจอร์ (Schrödinger’s cat) เป็นการทดลองทางความคิดเชิงปรัชญาที่เสนอโดยนักฟิสิกส์ชาวออสเตรีย แอร์วิน ชโรดิงเจอร์ ในปี ค.ศ. 1935 เพื่อแสดงความไม่สมเหตุสมผลของการตีความกลศาสตร์ควอนตัมแบบโคเปนเฮเกน โดยสมมติให้แมวอยู่ในกล่องปิดสนิทพร้อมสารกัมมันตรังสีที่อาจสลายตัวหรือไม่ก็ได้ภายใน 1 ชั่วโมง หากสลายตัว แมวจะตาย ทำให้ตามทฤษฎีควอนตัม แมวอยู่ในสถานะ “ซ้อนทับ” คือทั้งเป็นและตายพร้อมกันจนกว่าจะมีผู้เปิดกล่องสังเกตการณ์
ถ้าเรานำทฤษฎี แมวของชโรดิงเจอร์ มาอธิบายความต่างระหว่าง 0 กับ Null เราจะเห็นภาพของ “สถานะ” ได้ชัดเจนขึ้นทันที
- สถานะ Null
ในขณะที่แมวอยู่ในกล่องที่ปิดสนิท ตามทฤษฎีควอนตัม แมวอยู่ในสภาวะซ้อนทับ คือ “ไม่รู้ว่าตายหรือเป็น”- นี่คือ Null: ข้อมูลยังไม่ถูกเปิดเผย ยังไม่มีการวัดค่า เราไม่สามารถสรุปได้ว่าเป็น 0 หรือ 1
- สถานะนี้คือ “ความไม่แน่นอน”
- สถานะ 0 หรือ 1
เมื่อคุณตัดสินใจเปิดกล่องออกดู ฟังก์ชันคลื่นจะยุบตัวลงเหลือสถานะเดียว- ถ้าเปิดมาแล้วแมวตาย: ค่าที่ได้คือ 0
- ถ้าเปิดมาแล้วแมวยังอยู่: ค่าที่ได้คือ 1
- 0 และ 1 คือ “ข้อมูลที่มีการยืนยันแล้ว”
สรุปแบบเห็นภาพ
- Null: คือกล่องที่ยังปิดอยู่
- 0: คือเปิดกล่องมาแล้วพบว่า “ไม่มีชีวิต”
มุมมองโปรแกรมเมอร์: > หากคุณเขียนฟังก์ชันcheckCatStatus ()- ถ้า return Null แปลว่า “ยังไม่ได้เปิดกล่อง”
- ถ้า return 0 แปลว่า “เปิดดูแล้ว แมวตาย”
การสับสนระหว่างสองค่านี้ในระบบฐานข้อมูล ก็เหมือนกับการทึกทักไปเองว่าแมวตายแล้วทั้งที่ยังไม่ได้เปิดกล่องดู ซึ่งอาจนำไปสู่ข้อผิดพลาดร้ายแรงในการวิเคราะห์ข้อมูลได้ครับ
ทำไมต้องระวัง ?
ในทาง Programming หรือ SQL การใช้ Null ผิดที่อาจทำให้โปรแกรมพังได้ เช่น
- การหารด้วย 0: คอมพิวเตอร์จะฟ้องว่า
Division by zero - การหารด้วย Null: ผลลัพธ์มักจะได้
Null
อ่านเพิ่มเติม