| Bug #18834 | ALTER TABLE ADD INDEX on table with two timestamp fields | ||
|---|---|---|---|
| Submitted: | 6 Apr 2006 7:59 | Modified: | 14 Mar 2008 20:21 |
| Reporter: | Thomas Sondag | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: DDL | Severity: | S3 (Non-critical) |
| Version: | 5.0.19, 5.1 BK | OS: | Linux (Linux RedHat AS3) |
| Assigned to: | Alexander Nozdrin | CPU Architecture: | Any |
[6 Apr 2006 7:59]
Thomas Sondag
[6 Apr 2006 10:59]
Valeriy Kravchuk
Thank you for a problem report. Sorry, but I was not able to repeat the behaviour you described on 5.0.21-BK: mysql> create table test2 (id_test2 bigint not null,time timestamp NOT NULL, time2 timestamp, id_test1 bigint NOT NULL) ENGINE = INNODB; Query OK, 0 rows affected (0.07 sec) mysql> ALTER TABLE test2 ADD INDEX test2_id_test1_idx (id_test1); Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select version(); +-----------+ | version() | +-----------+ | 5.0.21 | +-----------+ 1 row in set (0.00 sec) ALTER TABLE just works. So, please, check the newer version, 5.0.19.
[6 Apr 2006 12:45]
Thomas Sondag
Thanks for your fast answer, So I try with version 5.0.19 I retry the test and I find that the problem come with sql-mode=TRADITIONAL (in my.cnf). It work fine without this mode.
[18 Oct 2006 18:45]
Sveta Smirnova
Thank you for the report.
Verified on Linux using last BK sources as described in last comment:
mysql> set @@sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.01 sec)
mysql> create table test2 (id_test2 bigint not null,time timestamp NOT NULL, time2
-> timestamp, id_test1 bigint NOT NULL) ENGINE = INNODB;
Query OK, 0 rows affected (0.16 sec)
mysql> ALTER TABLE test2 ADD INDEX test2_id_test1_idx (id_test1);
ERROR 1067 (42000): Invalid default value for 'time2'
mysql>
[18 Oct 2006 18:51]
Sveta Smirnova
5.1 branch affected too. Engine does not matter. There is duplicate bug #23439.
[29 Jan 2008 11:28]
Alexander Nozdrin
This is not an ALTER TABLE problem -- the problem is in CREATE TABLE.
The problem is that
CREATE TABLE t1(c1 TIMESTAMP, c2 TIMESTAMP)
defaults c2 to zero date, which is prohibited in the TRADITIONAL
sql mode.
I.e.:
CREATE TABLE t1(c1 TIMESTAMP, c2 TIMESTAMP)
equals to:
CREATE TABLE t1(
c1 TIMESTAMP, c2 TIMESTAMP DEFAULT 0)
References:
- SQL modes description:
http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html
- TIMESTAMP description:
http://dev.mysql.com/doc/refman/5.1/en/timestamp.html
Test case:
> set sql_mode = traditional;
> CREATE TABLE t1(c1 TIMESTAMP, c2 TIMESTAMP);
-- Success. This is the problem -- it should have failed.
> CREATE TABLE t2(c1 TIMESTAMP, c2 TIMESTAMP DEFAULT 0);
-- Error. That's expected.
[4 Feb 2008 14:40]
Alexander Nozdrin
Bug#24443 has been marked as a duplicate of this bug.
[14 Feb 2008 15:13]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/42287 ChangeSet@1.2551, 2008-02-14 18:13:40+03:00, anozdrin@quad. +3 -0 A patch for Bug#18834: ALTER TABLE ADD INDEX on table with two timestamp fields. The actual problem here was that CREATE TABLE allowed zero date as a default value for a TIMESTAMP column in NO_ZERO_DATE mode. The thing is that for TIMESTAMP date type specific rule is applied: column_name TIMESTAMP == column_name TIMESTAMP DEFAULT 0 whever for any other date data type column_name TYPE == column_name TYPE DEFAULT NULL The fix is to raise an error when we're in NO_ZERO_DATE mode and there is TIMESTAMP column w/o default value.
[14 Feb 2008 15:38]
Alexander Nozdrin
Pushed into 5.1-runtime.
[3 Mar 2008 18:19]
Bugs System
Pushed into 5.1.24-rc
[3 Mar 2008 18:19]
Bugs System
Pushed into 6.0.5-alpha
[14 Mar 2008 20:21]
Jon Stephens
Documented bugfix in the 5.1.24 and 6.0.5 changelogs as follows:
CREATE TABLE allowed 0 as the default value for a
TIMESTAMP column when the server was running in
NO_ZERO_DATE mode.
[29 Mar 2008 19:44]
Jon Stephens
Bugfix now also noted in 5.1.23-ndb-6.3.11 changelog.
