ฉันไม่รู้เกี่ยวกับ MySQL และ PostgreSQL แต่ให้ฉันทำสิ่งนี้โดยทั่วไป
มีหนึ่ง DBMS คือ Oracle ซึ่งไม่อนุญาตให้เลือกเป็นผู้ใช้ระหว่าง NULL และ '' สิ่งนี้แสดงให้เห็นอย่างชัดเจนว่าไม่จำเป็นต้องแยกแยะระหว่างทั้งสอง มีผลกระทบที่น่ารำคาญ:
คุณตั้งค่า varchar2 เป็นสตริงว่างเช่นนี้:
Update mytable set varchar_col = '';
สิ่งต่อไปนี้นำไปสู่ผลลัพธ์เดียวกัน
Update mytable set varchar_col = NULL;
แต่ในการเลือกคอลัมน์ที่ค่าว่างเปล่าหรือค่า NULL คุณต้องใช้
select * from mytable where varchar_col is NULL;
การใช้
select * from mytable where varchar_col = '';
ถูกต้องทางไวยากรณ์ แต่จะไม่ส่งกลับแถว
ในอีกด้านหนึ่งเมื่อเชื่อมสตริงใน Oracle NULL varchars ถือว่าเป็นสตริงว่าง
select NULL || 'abc' from DUAL;
อัตราผลตอบแทนabc DBMS อื่นจะคืนค่า NULL ในกรณีเหล่านี้
เมื่อคุณต้องการแสดงอย่างชัดเจนว่ามีการกำหนดค่าคุณต้องใช้บางอย่างเช่น ''
และคุณต้องกังวลว่าการตัดส่วนที่ไม่ว่างเปล่าเป็น NULL หรือไม่
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
มันทำ
ตอนนี้ดู DBMS โดยที่ '' ไม่เหมือนกับ NULL (เช่น SQL-Server)
โดยทั่วไปแล้วการทำงานกับ '' จะง่ายกว่าและในกรณีส่วนใหญ่ไม่จำเป็นต้องแยกปฏิบัติระหว่างทั้งสอง หนึ่งในข้อยกเว้นที่ฉันรู้คือเมื่อคอลัมน์ของคุณแสดงถึงการตั้งค่าบางอย่างและคุณไม่มีค่าเริ่มต้นที่ว่างเปล่าสำหรับพวกเขา เมื่อคุณสามารถแยกความแตกต่างระหว่าง '' และ NULL ได้คุณจะสามารถแสดงได้ว่าการตั้งค่าของคุณว่างเปล่าและหลีกเลี่ยงการใช้ค่าเริ่มต้น
NULL
หรือไม่