スクリプトを実行してデータベースを変更しようとしています。このクエリ
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」のデフォルト値はありますか?または、コード内の「無効な日付」に依存するのをやめるように開発者に指示する必要がありますか?
これは、文字セットよりもSQLモードの問題のように見えます。厳格モード(厳密には、厳格モードの一部であるNO_ZERO_DATE)は、厳格をオンにする前にテーブルがすべてゼロのデフォルト日付で作成された場合、通常、そのエラーを引き起こします。
私たちが使用しているもの(同様の変更日付列)は、「1970-01-01 00:00:01」です。
少し関連する注意点として、これらの列(および作成時刻)にもタイムスタンプを使用しています。ストレージ容量が半分になり、アクセスが高速になります。