TIMESTAMP
MySQLの列はデフォルトでデフォルト値にNOT NULL
なり、その恐ろしいゼロの日付がデフォルト値になります(詳細についてはマニュアルを参照してください)。
これを回避する方法を確認できる唯一の方法は、生成されたSQLを変更して、変更セットにDEFAULT NULL
句を含めることです。
<addColumn tableName="foo">
<column name="new_date" type="TIMESTAMP"/>
</addColumn>
<modifySql>
<replace replace="TIMESTAMP" with="TIMESTAMP NULL DEFAULT NULL"/>
</modifySql>
defaultValueDate="NULL"を指定しても機能しないようです。これは、Liquibaseがtimestamp
MySQLの癖を知らず、列をで埋める必要があるという明白なことを述べる必要はないと考えているためだと思いますNULL
。
編集
もちろん、これは新しい行では機能しないことを忘れました。Liquibaseを使用してデフォルト値を再適用するには、次の2つの方法があります。
CURRENT_TIMESTAMP
デフォルト値を次のように変更する2番目のchangeSetを追加します。
<sql>
alter table foo modify new_date timestamp null default current_timestamp
</sql>
またはDEFAULT NULL
、列を追加するときに使用せずに、すべての(既存の)行をに戻すステートメントを実行しNULL
ます。。付きのsql
タグupdate foo set new_date = null
。