私は移行を行っており、日付が '0000-00-00 00:00:00' になり、strtotime() を実行して false として返されると、INT データ型である新しいテーブルの列に -2147483648 として保存されます。デフォルトを 0 に設定しても NULL に設定しても、その負の数として保存されます。日付フィールドごとに例外をコーディングする必要を避けたい (データ型を変更するオプションがない) ため、PHP (1 行を使用) または MySQL でこれらにデフォルトを設定する簡単な方法はありますか? 「空の」日付?
3 に答える
コードがないと答えるのは難しいですが、三項演算子の使用を検討してください。
元:
$variable_to_write_to_db = ($field == 0 || $field == NULL ? writeDefaultsToDB() : writeToDB($field))
またはそのようなもの。
三項演算子は次のように機能します (上記のリンクからコピー)。
/* most basic usage */
$var = 5;
$var_is_greater_than_two = ($var > 2 ? true : false); // returns true
頑張ってください、楽しんでください
時間は、1901-12-13から2038-01-190000-00-00
までの範囲外です。strtotime
壊れたデータの下限を返します。これは、ほぼすべてのUNIXtime_t
ベースの機能に共通です。
NULL
私のアドバイスは、処理する前にそれらの日付を置き換えることです。それらは無効です。
列のデフォルト値を探していて、日付を渡していないだけですか (つまり、値が指定されていない場合、すべての日付を何らかの値に設定しているだけですか?)
その場合、デフォルトを 0 にしたい場合、これは機能するはずです (日付がナンセンスな場合は null を許可する方がよいでしょうか?):
ALTER TABLE YourTable MODIFY YourColumn Default '0';
strtotime
次に、失敗した結果で呼び出すときにデータベースに何も渡さないことを確認します (または null で問題ありません) ( strtotime
1901 年 12 月 13 日金曜日 20:45:54 UTC より前の日付に対しては有効な結果が返されないことに注意してください。したがって、0000-00 -00 はこれで正しく失敗します)。