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  

Tags:,

ความคิดเห็นของคุณ :)

%d bloggers like this: