For tables, MyISAM NULL creates an extra bit for each NULLABLE column (zero bit) for each row. If the column is not NULLABLE, an extra bit of information is never needed. However, this is complemented by 8-bit bytes, so you always get 1 + mod 8 bytes for counting NULLABLE columns. one
Text columns are slightly different from other data types. Firstly, for "" the entry in the table contains the length of two bytes of the string, followed by the bytes of the string, and is the length structure of the variant. In the case of NULL, there is no need for length information, but it was always included as part of the column structure.
In InnoDB, NULLS do not take up space: they simply do not exist in the dataset. The same is true for an empty string, since data offsets also do not exist. The only difference is that NULL will be set to NULL, but empty lines will not. 2
When the data is actually laid out on disk, NULL and “Take EXACTLY THE SAME SPACE in both data types. However, when searching for a value, the NULL check is performed a little faster than the check for '', since you do not need to consider the length of the data in your calculations: you only check the zero bit.
As a result, NULL and '' spaces in space, NULL and '' have NO SIZE INFLUENCE unless the column indicates NULLable or not. If the column is NOT NULL, only in the MyISAM tables will you see any difference in form (and then, obviously, the default NULL value cannot be used, so a moot point).
The real question then comes down to the interpretation of the column application "no value set here". If "is a valid value meaning" the user did not enter anything here "or something like that, then by default NULL is preferable because you want to distinguish between NULL and" "when entering a record that has no data.
In general, the default is really only useful for database refactoring, when new values should take effect for old data. In this case, again, the choice depends on how the application data is interpreted. For some old data, NULL is perfect and best suited (a column did not exist before it was now NULL!). For others, “more appropriate” (often when queries use SELECT * and NULL, they cause problems with failure).
In ULTRA-GENERAL TERMS (and from a philosophical point of view), NULL columns are preferable to NULLABLE columns by default because it gives a better semantic interpretation of "No Value Specified".
1 [ http://forge.mysql.com/wiki/MySQL_Internals_MyISAM]
2 [ http://forge.mysql.com/wiki/MySQL_Internals_InnoDB]