Untuk tabel MyISAM, NULL membuat bit tambahan untuk setiap kolom NULLABLE (bit nol) untuk setiap baris. Jika kolom tidak NULLABLE, sedikit informasi tambahan tidak pernah diperlukan. Namun, itu diisi hingga 8 bit byte sehingga Anda selalu mendapatkan 1 + mod 8 byte untuk jumlah kolom NULLABLE. 1
Kolom teks sedikit berbeda dari tipe data lainnya. Pertama, untuk "" entri tabel menampung dua byte panjang string diikuti oleh byte string dan merupakan struktur panjang varian. Dalam kasus NULL, informasi panjang tidak diperlukan, tetapi tetap disertakan sebagai bagian dari struktur kolom.
Di InnoDB, NULLS tidak memakan tempat:Mereka sama sekali tidak ada dalam kumpulan data. Hal yang sama berlaku untuk string kosong karena offset data juga tidak ada. Satu-satunya perbedaan adalah bahwa NULL akan memiliki bit NULL yang disetel sedangkan string kosong tidak. 2
Ketika data benar-benar diletakkan di disk, NULL dan '' mengambil RUANG PERSIS SAMA di kedua tipe data. Namun, ketika nilai dicari, memeriksa NULL sedikit lebih cepat daripada memeriksa '' karena Anda tidak perlu mempertimbangkan panjang data dalam perhitungan Anda:Anda hanya memeriksa bit nol.
Sebagai akibat dari NULL dan '' perbedaan ruang, NULL dan '' tidak memiliki DAMPAK UKURAN kecuali kolom ditentukan menjadi NULLable atau tidak. Jika kolomnya BUKAN NULL, hanya di tabel MyISAM Anda akan melihat perbedaan kinerja (dan kemudian, jelas, NULL default tidak dapat digunakan sehingga pertanyaan diperdebatkan).
Pertanyaan sebenarnya kemudian bermuara pada interpretasi aplikasi dari kolom "tidak ada nilai yang ditetapkan di sini". Jika "" adalah nilai valid yang berarti "pengguna tidak memasukkan apa pun di sini" atau semacamnya, maka NULL default lebih disukai karena Anda ingin membedakan antara NULL dan "" ketika catatan yang dimasukkan tidak memiliki data di dalamnya.
Namun secara umum, default benar-benar hanya berguna untuk refactoring database, ketika nilai-nilai baru perlu berlaku pada data lama. Dalam hal ini, sekali lagi, pilihannya tergantung pada bagaimana data aplikasi diinterpretasikan. Untuk beberapa data lama, NULL sangat sesuai dan paling cocok (kolom tidak ada sebelumnya sehingga memiliki nilai NULL sekarang!). Untuk yang lain, "" lebih tepat (sering kali ketika kueri menggunakan SELECT * dan NULL menyebabkan masalah mogok).
Dalam PERSYARATAN ULTRA-UMUM (dan dari sudut pandang filosofis) default NULL untuk kolom NULLABLE lebih disukai karena memberikan interpretasi semantik terbaik "Tidak Ada Nilai yang Ditentukan".
1 [http://forge.mysql.com/wiki/MySQL_Internals_MyISAM]
2 [http://forge.mysql.com/wiki/MySQL_Internals_InnoDB]