Saya tidak tahu tentang MySQL dan PostgreSQL, tetapi biarkan saya memperlakukan ini secara umum.
Ada satu DBMS yaitu Oracle yang tidak memungkinkan untuk memilih pengguna antara NULL dan ''. Ini jelas menunjukkan bahwa tidak perlu untuk membedakan keduanya. Ada beberapa konsekuensi yang menjengkelkan:
Anda mengatur varchar2 ke string kosong seperti ini:
Update mytable set varchar_col = '';
berikut ini mengarah pada hasil yang sama
Update mytable set varchar_col = NULL;
Tetapi untuk memilih kolom di mana nilainya kosong atau NULL, Anda harus menggunakan
select * from mytable where varchar_col is NULL;
Menggunakan
select * from mytable where varchar_col = '';
secara sintaksis benar, tetapi tidak pernah mengembalikan baris.
Di sisi lain, ketika merangkai string di Oracle. NULL varchars diperlakukan sebagai string kosong.
select NULL || 'abc' from DUAL;
hasil abc . DBMS lain akan mengembalikan NULL dalam kasus ini.
Ketika Anda ingin mengekspresikan secara eksplisit, bahwa suatu nilai diberikan, Anda harus menggunakan sesuatu seperti ''.
Dan Anda harus khawatir apakah memangkas tidak menghasilkan kosong di NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Itu benar.
Sekarang melihat DBMS di mana '' tidak identik dengan NULL (mis. SQL-Server)
Bekerja dengan '' umumnya lebih mudah dan dalam kebanyakan kasus tidak ada kebutuhan praktis untuk membedakan keduanya. Salah satu pengecualian yang saya tahu, adalah ketika kolom Anda mewakili beberapa pengaturan dan Anda belum mengosongkan default untuk mereka. Saat Anda dapat membedakan antara '' dan NULL, Anda dapat menyatakan bahwa pengaturan Anda kosong dan menghindari penerapan default.
NULL
atau tidak