web-dev-qa-db-ja.com

utf8_general_ciに変更すると、DateTimeのデフォルト値が無効になる

スクリプトを実行してデータベースを変更しようとしています。このクエリ

ALTER TABLE cmContentVersion CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

このエラーを与えます

ERROR 1067 (42000) at line 68: Invalid default value for 'modifiedDateTime'
Warning (Code 1264): Out of range value for column 'modifiedDateTime' at row 1
Error (Code 1067): Invalid default value for 'modifiedDateTime'

modifiedDateTimeは次のように定義されます

`modifiedDateTime` datetime NOT NULL default '0000-00-00 00:00:00',

質問: utf8_general_ciの使用時に0000-00-00 00:00:00を置き換えることができる有効な「invalid」のデフォルト値はありますか?または、コード内の「無効な日付」に依存するのをやめるように開発者に指示する必要がありますか?

7
Nifle

これは、文字セットよりもSQLモードの問題のように見えます。厳格モード(厳密には、厳格モードの一部であるNO_ZERO_DATE)は、厳格をオンにする前にテーブルがすべてゼロのデフォルト日付で作成された場合、通常、そのエラーを引き起こします。

私たちが使用しているもの(同様の変更日付列)は、「1970-01-01 00:00:01」です。

少し関連する注意点として、これらの列(および作成時刻)にもタイムスタンプを使用しています。ストレージ容量が半分になり、アクセスが高速になります。

14
TechieGurl