Bug #73347 | TIMESTAMP Initialization and the NULL Attribute | ||
---|---|---|---|
Submitted: | 21 Jul 2014 17:00 | Modified: | 28 Jul 2014 21:39 |
Reporter: | John Smith | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
Version: | 5.6.19-log MySQL Community Server (GPL) | OS: | Linux (Red Hat Enterprise Linux Server release 6.4 (Santiago)) |
Assigned to: | CPU Architecture: | Any | |
Tags: | insert, null, timestamp |
[21 Jul 2014 17:00]
John Smith
[22 Jul 2014 6:42]
MySQL Verification Team
Thank you for the report. I cannot repeat described behavior with reported/later versions. ## 5.6.19 ### with sql mode disabled mysql> use test Database changed mysql> set sql_mode=''; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'sql_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode | | +---------------+-------+ 1 row in set (0.00 sec) mysql> CREATE TABLE `timetest` ( -> `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.03 sec) mysql> INSERT timetest (updatedAt) VALUE(NULL); Query OK, 1 row affected (0.01 sec) mysql> select * from timetest; +---------------------+ | updatedAt | +---------------------+ | 2014-07-24 02:26:19 | +---------------------+ 1 row in set (0.00 sec) mysql> select version(); +-------------------------------------------+ | version() | +-------------------------------------------+ | 5.6.19-enterprise-commercial-advanced-log | +-------------------------------------------+ 1 row in set (0.00 sec) ### with default sql_mode mysql> set sql_mode=default; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'sql_mode'; +---------------+--------------------------------------------+ | Variable_name | Value | +---------------+--------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +---------------+--------------------------------------------+ 1 row in set (0.00 sec) mysql> drop table timetest; Query OK, 0 rows affected (0.02 sec) mysql> CREATE TABLE `timetest` ( `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.02 sec) mysql> INSERT timetest (updatedAt) VALUE(NULL); Query OK, 1 row affected (0.01 sec) mysql> select * from timetest; +---------------------+ | updatedAt | +---------------------+ | 2014-07-24 02:57:24 | +---------------------+ 1 row in set (0.00 sec) mysql> select * from timetest; +---------------------+ | updatedAt | +---------------------+ | 2014-07-24 02:57:24 | +---------------------+ 1 row in set (0.00 sec)
[22 Jul 2014 6:43]
MySQL Verification Team
// 5.6.21 mysql> set sql_mode=''; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'sql_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode | | +---------------+-------+ 1 row in set (0.00 sec) mysql> CREATE TABLE `timetest` ( -> `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.44 sec) mysql> INSERT timetest (updatedAt) VALUE(NULL); Query OK, 1 row affected (0.04 sec) mysql> select * from timetest; +---------------------+ | updatedAt | +---------------------+ | 2014-07-24 01:48:14 | +---------------------+ 1 row in set (0.00 sec) mysql> select version(); +-------------------------------------------+ | version() | +-------------------------------------------+ | 5.6.21-enterprise-commercial-advanced-log | +-------------------------------------------+ 1 row in set (0.00 sec)
[22 Jul 2014 14:09]
John Smith
Would you be able to try with the community edition?
[23 Jul 2014 6:55]
MySQL Verification Team
Both are same, will test and let you know. Thanks, Umesh
[28 Jul 2014 21:23]
John Smith
I just did a fresh install of MySQL 5.6.19 (community) and am having the same issue: [04:21 PM] [root@servername] ~ $ mysql -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 94675 Server version: 5.6.19-log MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. dbadmin@localhost[(none)]> use test; Database changed dbadmin@localhost[test]> CREATE TABLE `timetest` ( -> `updatedAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.01 sec) dbadmin@localhost[test]> INSERT timetest (updatedAt) VALUE(NULL); ERROR 1048 (23000): Column 'updatedAt' cannot be null dbadmin@localhost[test]>
[28 Jul 2014 21:39]
John Smith
I am closing this ticket. I discovered the issue. The problem is due to the explicit_defaults_for_timestamp variable. When this is turned on it prevents MySQL from being able to use NULL to set the default.