หากชื่อของบุคคลนั้นเป็นโมฆะมันจะทำลายฐานข้อมูลได้อย่างไร?


55

ผมอ่านนี้บทความเกี่ยวกับบีบีซี มันบอกเล่าเรื่องราวของบุคคลที่ชื่อ Jenifer Null และวิธีที่เธอเผชิญกับปัญหาแบบวันต่อวันในขณะที่ใช้ฐานข้อมูลออนไลน์เช่นการจองตั๋วเครื่องบินธนาคารทางอินเทอร์เน็ตเป็นต้น

ฉันไม่ชำนาญในฐานข้อมูลและฉันไม่ได้ใช้บ่อยนัก เมื่อฉันสร้างเว็บไซต์เพื่อการเรียนรู้การตรวจสอบความถูกต้องของฟอร์มเซิร์ฟเวอร์ใช้นิพจน์ทั่วไป จากสิ่งที่ฉันจำได้มันจะยอมรับชื่อ "Null" อย่างมีความสุข ฉันยังไม่ได้ลองเลย

มีใครช่วยอธิบายด้านเทคนิคเมื่อสถานการณ์นี้จะเกิดขึ้น? การตรวจสอบความถูกต้องของฟอร์มกำลังทำstring == NULLสิ่งใดสิ่งหนึ่งหรือไม่ NULL is same as "NULL"ดังนั้นแม้ผมไม่คิดว่า


32
เห็นได้ชัดว่าบทความเขียนโดยนักข่าว Nulls เป็นสาเหตุของความสับสนมากมายคุณไม่คาดหวังว่านักข่าวจะสับสนน้อยลง
ypercubeᵀᴹ

2
ทุกคน:ความคิดเห็นพร้อมลิงก์ไปยังคำถามหรือบทความที่เกี่ยวข้องได้ถูกย้ายไปที่คำตอบของ Community Wikiด้านล่าง โปรดแก้ไข (หรือแนะนำการแก้ไข) กับคำตอบนั้นแทนที่จะเพิ่มลิงก์เพิ่มเติมในหน้านี้
พอลไวท์

คำตอบ:


42

ฉันได้เห็นอินเทอร์เฟซฐานข้อมูล (เช่นไลบรารีเฟรมเวิร์ก) ที่ส่งกลับ 'null' เป็นสตริงสำหรับคอลัมน์ null ฉันเชื่อว่ามีการตั้งค่าสถานะที่จะเปิดหรือปิดสิ่งนี้สำหรับการดีบัก การตั้งค่าสถานะนี้ช่วยให้นักพัฒนาเพื่อระบุว่าเขตข้อมูลที่ว่างเปล่าเป็นผลลัพธ์ของค่า Null หรือค่าว่างเปล่าได้อย่างง่ายดาย นี่คือการตั้งค่าที่ไม่ดีโดยเฉพาะอย่างยิ่งในการผลิตและจะอธิบายปัญหาที่อธิบายไว้ในบทความ

การประมวลผลย้อนกลับของการแปลง 'null' เป็นค่า null ควรสร้างข้อผิดพลาดของแอปพลิเคชันสำหรับเขตข้อมูลชื่อ ฉันคาดว่าสิ่งนี้จะได้รับการแก้ไขอย่างรวดเร็ว


แน่นอน - นี่เป็นเรื่องธรรมดาในกรอบงานสำหรับภาษาที่ไม่มีการพิมพ์ซึ่งข้อมูลทั้งหมดจะถูกแปลงเป็นสตริง ไม่กี่ปีที่ผ่านมาตั้งแต่ฉันทำงาน แต่ฉันเชื่อว่า ColdFusion เวอร์ชันแรก ๆ มีปัญหานี้เช่นกัน
จูลส์

25

มีโอกาสที่ดีที่ความสับสนของคุณเกิดขึ้นจากนักข่าว บทความนี้กล่าวถึงปัญหาเกี่ยวกับการใช้ระบบแอปพลิเคชันทั้งหมดไม่ใช่เฉพาะฐานข้อมูล สมเหตุสมผลอย่างสมบูรณ์เนื่องจากเป็นงานเขียนชิ้นหนึ่งที่มุ่งเน้นไปที่การบริโภคจำนวนมาก

ดูเหมือนว่าปัญหาเหล่านี้จะเกิดขึ้นที่ชั้นแอปพลิเคชันแทนที่จะเป็น API ของฐานข้อมูล ค่าเวทย์มนตร์เป็นรูปแบบต่อต้านซึ่งเป็นเรื่องยากที่จะประทับตราออกจากอุตสาหกรรม นักเขียนโปรแกรมบางคนสามารถเขียนเงื่อนไขตามบรรทัดของ "คนที่พิมพ์ 'null' พวกเขาต้องหมายความว่าไม่มีค่าเพราะนั่นเป็นความหมายที่ว่าง! ความพยายามที่เข้าใจผิดในการป้องกันการฉีด SQL อาจเป็นสาเหตุของการกระทำผิดดังกล่าวของ Null หรือนามสกุลฮาวายซึ่งมีการเสนอราคาเดียวซึ่งเป็นตัวคั่นสตริง SQL มาตรฐาน

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


5
ฉันไม่รู้ว่า O'Brian เป็นชาวฮาวาย
glglgl

19

บทความนี้มีลิงก์ไปยังคำถาม Stack Overflowที่แสดงให้เห็นถึงปัญหา มันอยู่ในแอพพลิเคชั่น Flex ที่รหัส:

currentChild.appendChild("Fred");

จะผนวกองค์ประกอบที่มีคำว่าFredเอกสาร XML แต่รหัส:

currentChild.appendChild("null");

จะผนวกองค์ประกอบที่ว่างเปล่าไม่ใช่องค์ประกอบที่มีข้อความ "null"

XML ต่อไม่มีปัญหากับค่าข้อความ "NULL" ดังนั้นการรวมข้อความดังกล่าวจะไม่มีปัญหา ความจริงแล้วNULLไม่มีความหมายพิเศษใน XML เลย


13

สิ่งหนึ่งที่ฉันไม่คิดว่าฉันเคยเห็นกล่าวถึง: เราไม่ได้พูดถึง SQL

ชื่ออาจเริ่มต้น / สิ้นสุดในฐานข้อมูล ... แต่โดยปกติแล้วจะเกี่ยวข้องกับหลายช่องทาง ฐานข้อมูล, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, แบทช์, อื่น ๆ , ฯลฯ ...

แต่ละขั้นตอนเหล่านี้ในไปป์ไลน์อาจเกี่ยวข้องกับการแปลงข้อมูลจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่ง จากตาราง SQL ถึง json, ถึง xml, เป็น CSV, ฯลฯ ...

ณ จุดใด ๆ ในห่วงโซ่ที่ซับซ้อนนี้จะใช้เวลาเพียงหนึ่งจุดของการเขียนโปรแกรมที่ไม่ดีหรือภาษาโปรแกรมฟัซซี่ ( ตัวอย่างเช่นการจัดการ null Javascript ) ...

ดังนั้นอย่า จำกัด ตัวคุณเองกับปัญหาที่เกิดขึ้นในฐานข้อมูล ...


8

คำตอบ Wiki ชุมชนสำหรับลิงค์ต่าง ๆ เดิมทิ้งไว้เป็นความคิดเห็นในคำถามยอดนิยมนี้


4

ฐานข้อมูลเชิงสัมพันธ์ต้องรองรับค่าที่หายไปหรือไม่เกี่ยวข้อง ตัวอย่างเช่นรายชื่อลูกค้าอาจรวมถึงหมายเลขโทรศัพท์มือถือหรือเพศ จะเป็นอย่างไรถ้า บริษัท ต้องการที่จะเป็นลูกค้า - ควรมีเพศใด

ตัวบ่งชี้พิเศษใช้เพื่อแสดงค่าที่หายไป แฟล็กพิเศษนี้เป็น NULL ดังนั้นการเขียนโปรแกรมเลอะเทอะอาจทำให้ตัวบ่งชี้ค่าที่หายไป - NULL - จะสับสนกับนามสกุลของ Jennifer Null อาจตีความนามสกุลของเธอว่าเป็นข้อมูลที่หายไปแทนที่จะเป็นค่าจริง

มันเหมือนกับการเปิดบัญชีธนาคาร แต่ไม่ได้ฝากเงิน ยอดคงเหลือเป็นศูนย์ นี่ไม่ได้หมายความว่าคุณไม่มียอดเงิน หมายความว่าคุณมียอดเงินคงเหลือและค่าของมันคือ "0" แต่การเขียนโปรแกรมเลอะเทอะอาจตีความว่าศูนย์เป็น "ไม่มี" และตรวจสอบว่าคุณไม่มีบัญชีเลย


2

มีซอฟต์แวร์ที่เขียนไม่ดีจำนวนมากและแม้แต่เฟรมเวิร์กซึ่งมีพฤติกรรมแปลก ๆ กับบางคนที่ชื่อ Null

แต่อย่าลืมองค์ประกอบมนุษย์: บางทีมนุษย์อาจเห็นชื่อบนหน้าจอและงานพิมพ์และคิดว่ามันเป็นความผิดพลาดและการลบบุคคลนั้นอาจเป็นสาเหตุอื่นได้หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.