I want a non-nullable timestamp
column where the inserter is required to specify what the value should be.
The following configuration
CREATE TABLE test (
t timestamp not null
);
results in the default CURRENT_TIMESTAMP
value, while
CREATE TABLE test (
t timestamp not null default null
);
results in
ERROR 1067 (42000): Invalid default value for 't'
I want the same behavior that, for example, the int
column below has:
CREATE TABLE test (
i int not null
);
1 Answer 1
I think that the only way is setting the server variable explicit_defaults_for_timestamp
to ON
(default is OFF
).
This will disable the non-standard behaviour of timestamp
columns regarding NULL
values:
If
explicit_defaults_for_timestamp
is enabled, the server disables the nonstandard behaviors and handlesTIMESTAMP
columns as follows:
It is not possible to assign a
TIMESTAMP
column a value ofNULL
to set it to the current timestamp. To assign the current timestamp, set the column toCURRENT_TIMESTAMP
or a synonym such asNOW()
....
TIMESTAMP
columns declared with theNOT NULL
attribute do not permitNULL
values. For inserts that specifyNULL
for such a column, the result is either an error for a single-row insert or if strict SQL mode is enabled, or '0000-00-00 00:00:00' is inserted for multiple-row inserts with strict SQL mode disabled. In no case does assigning the column a value ofNULL
set it to the current timestamp.