MySQL

mysqlでAlter Tableがうまくいかなかった話

More than 1 year has passed since last update.

症状

nullを許可していないカラムにnullを許可したい。

で、以下のエラー

流したSQL

ALTER TABLE users MODIFY email varchar(255);

エラーメッセージ

Error Code: 1067. Invalid default value for 'created_at'

なんでwwwできないwwwwwwmywwwwsqlさんwwwww俺たちwwww
友達wwwwだろwwww?wwwwwww

前提

Field Type Null Key Default Extra
id int(10) unsigned NO PRI NULL auto_increment
name varchar(255) NO NULL
email varchar(255) NO UNI NULL
password varchar(60) NO NULL
remember_token varchar(100) YES NULL
created_at timestamp NO 0000-00-00 00:00:00
updated_at timestamp NO 0000-00-00 00:00:00
confirmation_token varchar(255) YES NULL
confirmed_at timestamp YES NULL
confirmation_sent_at timestamp YES NULL

で、こうやったら治った

SET sql_mode = '';

MySQLにはSTRICT_ALL_TABLESなるsqlモードがあり、それが原因らしい

参考

【MySQL】MySQL5.6ではsql_modeがSTRICT_TRANS_TABLESになる

https://stackoverflow.com/questions/36882149/error-1067-42000-invalid-default-value-for-created-at