On 5/10/24 07:04, Martin Simmons wrote:
On Thu, 9 May 2024 14:45:31 -0400, Phil Stracchino said:

I'm seeing a LOT of columns either defined with a DEFAULT but allowed to
be NULL (in which case the DEFAULT will not be used because NULL is
allowed),

Are you sure the DEFAULT will not be used?  I think it will be used if the
column is omitted in an INSERT.  If you want to insert NULL and there is a non
NULL DEFAULT then you need to provide NULL for that column explicity in the
INSERT.


OK, so, I can't speak to the internals of PostgreSQL and don't wish to. But I did just recheck in MariaDB (10.6.17). I've never tried specifying a DEFAULT value *WITHOUT* NOT NULL, because why would you, but I just re-checked, and somewhat to my surprise, that is in fact valid. (I expected weird behavior.)


This is the documented/tested behavior for missing values in MariaDB 10.6 at least, which matches the *documented* behavior of MySQL 8.x:


Column declared with DEFAULT but neither NULL nor NOT NULL:
— Implicit default for the data type is used
— NULLs can be manually inserted

Column declared NULL with no DEFAULT
— NULLs can be manually inserted
— If STRICT SQL is in effect, missing value inserts NULL
— If STRICT is not in effect, the implicit default for data type is used

Column declared with neither NULL/NOT NULL nor DEFAULT
— As for previous case, as far as I can tell

Column declared NOT NULL without DEFAULT (SQL99 violation)
— Missing value creates an error
— NULL creates an error


It should go without saying that STRICT_ALL_TABLES *should* ideally always be in use. But a lot of times, you *can't* because some application or another uses non-compliant SQL and breaks with STRICT in use. And it also should go without saying that best practice is to explicitly declare whether NULLs are allowed in the column instead of relying on what the database internals do when it is not specified.

(MySQL 8 and I think MariaDB 10 clamped down a lot on what SQL99 violations were ... let's say tolerated.)



--
  Phil Stracchino
  Fenian House Publishing
  ph...@caerllewys.net
  p...@co.ordinate.org
  Landline: +1.603.293.8485
  Mobile:   +1.603.998.6958



_______________________________________________
Bacula-devel mailing list
Bacula-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-devel

Reply via email to