NULL ไม่ใช่ 0 (ศูนย์)

NULL ไม่ใช่ 0 (ศูนย์) เรื่องนี้ขอเล่าเป็นเกร็ดก็แล้วกัน เพราะได้เจอมาขณะทำงานเกี่ยวกับ ArcGIS แล้วสงสัยว่าทำไมผลลัพธ์จาก script ที่ได้ถึงออกมาแปลก ๆ เมื่อลองมาไล่ตรวจสอบดูจึงได้เห็นว่าเป็นเพราะมีคนใส่ค่า default เป็น 0 ไว้ เลยไม่มีการเปลี่ยนแปลงค่าเพราะเขียน script ให้เปลี่ยนแปลงเฉพาะค่าที่เป็น Null

ดังนั้นเลยอยากทำความเข้าใจว่า ค่านี้ ไม่ใช่ 0 นะจ๊ะ

จะว่าไปปัญหานี้ไม่ใช่เรื่องใหม่ เคยเจอตอนใช้ SQL มีคำสั่งที่ต้องใช้ IS NULL แล้วพบว่า มีคนใส่ข้อมูลเป็น ” (String -ว่าง-) ทำให้ได้ผลลัพธ์ไม่ออกมาตามที่ต้องการ เพราะมันกลายเป็นว่ามีค่าใส่อยู่ คือค่า “ว่าง”

คือถ้าเป็น ‘‘ (string ว่าง) จะระบุได้เลยว่านี่คือ ไม่มี value นะ แต่ถ้าเป็น NULL หมายความว่าเราบอกไม่ได้หรอกว่าตรงนั้นมันไม่มี value มันอาจจะมี value อยู่ แต่เป็น value ที่ไม่รู้จัก

เช่นเดียวกับ 0 (ศูนย์ โดยทั่วไป เราจะคิดกันว่า Null คือค่า 0 และ เลข 0 ไม่มีค่า แต่ความจริง 0 มีค่า คือมีค่าเป็น 0

Null
Photo by Negative Space on Pexels.com

งงมั้ย?

Null ไม่ใช่ 0

Null จะหมายถึง ไม่มีค่า หรือไม่ทราบค่า บอกไม่ได้ว่ามันคือค่าอะไร นี่คือความแตกต่างที่ชัดเจนมากเวลาเขียน script หรือทำ database เพราะจะหมายถึงไม่มีค่าอะไรใส่ไว้ บอกไม่ได้ว่าเป็นค่าอะไร แต่ถ้าใส่ 0 ปั๊บ หมายถึง field นั้น มีค่าเป็น 0 ไม่ใช่ไม่มีค่าอะไรใส่ไว้ รวมถึง ถ้าเคาะ space เฉยๆ ก็ถือว่ามีค่าแล้ว ไมใช่ว่า field นั้น –ไม่มีค่าใดเก็บอยู่

ด้วยเหตุนี้ เวลาที่เขียน script ให้เปลี่ยนแปลง field ที่เป็น NULL พอไปใส่ค่าเป็น 0 จึงถึงว่า field นั้นไม่ตรงกับกฎที่วางไว้ Script จึงไม่เปลี่ยนข้อมูลใน field นั้น

ดังนั้นปัญหานี้เวลาที่จะทำอะไรเกี่ยวกับการเขียน script จึงควรไตร่ตรองให้รอบคอบว่าจะต้องทำงานกับอะไร เวลาเราบอกว่า ทำงานกับฟิลด์ที่ไม่ได้ใส่ค่าไว้ ต้องมั่นใจว่ามันคือไม่มีการใส่ค่าจริง ๆ ไม่งั้นจะมีปัญหา บางภาษา เช่น Julia จะไม่สนับสนุนให้ NULL เป็นค่าเริ่มต้น

เรื่องนี้เหมือนเป็นเรื่องเล็ก ๆ แต่มันก็สร้างปัญหาได้เหมือนกัน เป็นเรื่องจุกจิกที่…ถ้าเราทำความเข้าใจกันแต่แรกก็จะไม่ต้องเสียเวลามาปรับแต่งแก้ไขกันภายหลัง

แต่อย่างไรก็ตาม มันแก้ไขได้แหละ ไม่ใช่เรื่องซีเรียสอะไรหนักหนาสาหัส เพียงแค่พอกำลังทำงานแล้วมาติดขัดกับอะไรเล็ก ๆ น้อย ๆ แบบนี้ บางทีก็เสียอารมณ์ทำงานเหมือนกัน ใครบอกอายุมากขึ้นแล้วจะสุขุมใจเย็นลงคงใช้กับ DataRevol ไม่ได้แน่นอน

ลองอ่านหน้านี้ดูก็แล้วกัน ใน python ใช้เป็นคำว่า None แทน Null  

ลองอ่านเรื่อง ประเภทของข้อมูล Data Type ที่นี่


Discover more from Data Revol

Subscribe to get the latest posts sent to your email.