Here's a snippet from a mysql shell:

```
mysql> show variables like '%version%';
+-------------------------+--------------------------------------------------------+
| Variable_name           | Value                                                  |
+-------------------------+--------------------------------------------------------+
| innodb_version          | 5.7.27-30                                              |
| protocol_version        | 10                                                     |
| slave_type_conversions  |                                                        |
| tls_version             | TLSv1,TLSv1.1,TLSv1.2                                  |
| version                 | 5.7.27-30                                              |
| version_comment         | Percona Server (GPL), Release '30', Revision '8916819' |
| version_compile_machine | x86_64                                                 |
| version_compile_os      | debian-linux-gnu                                       |
| version_suffix          |                                                        |
+-------------------------+--------------------------------------------------------+
9 rows in set (0.01 sec)

mysql> show variables like '%strict%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_strict_mode | ON    |
+--------------------+-------+
1 row in set (0.00 sec)

mysql> select @@sql_mode;
+-------------------+
| @@sql_mode        |
+-------------------+
| STRICT_ALL_TABLES |
+-------------------+
1 row in set (0.00 sec)

mysql> create database stricttest;
Query OK, 1 row affected (0.00 sec)

mysql> use stricttest;
Database changed
mysql> create table foo(bar timestamp not null default current_timestamp);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into foo(bar) values(null);
Query OK, 1 row affected (0.00 sec)

```

The question
------------

I am under the impression that `STRICT_ALL_TABLES` should prevent the insert from succeeding, since `timestamp` is a `NOT NULL` column, but it works just fine. What can I do to make statements like this fail?

The context
-----------

I recently had a bunch of tests that used to pass start failing due to null inserts on timestamp columns. I don't know what environmental factor was different, but tribal knowledge around the office says that `sql_mode` has something to with it. I want to make these tests fail reliably so that the people who wrote them investigate and respond appropriately.

Currently, /etc/mysql/conf.d/mysqld.cnf looks like this:

```
[mysqld]
general_log=0
general_log_file=/var/log/mysql/general.log

secure_file_priv=""
datadir=/var/lib/mysql

sql_mode=STRICT_ALL_TABLES
bind-address = 127.0.0.1
default_time_zone='+00:00'
ssl=0
query_cache_type=0
max_connections=511
group_concat_max_len=65536
max_allowed_packet=500M
max_allowed_packet=256000000
innodb_buffer_pool_size=12G
innodb_buffer_pool_instances=1
innodb_thread_concurrency=8
innodb_log_buffer_size=128M
innodb_log_file_size=1000M
innodb_flush_log_at_trx_commit=2
innodb_flush_method=O_DIRECT
innodb_autoinc_lock_mode=2
innodb_doublewrite=0
innodb_strict_mode=ON                                                                                                         

```