PHPSQLは9か月ごとにnullになります
SQLエラー2018-9-31を使用すると、データベースに0000-00-00が入力されますが、その日にすべて0が表示される理由がわかりません。どんな助けでも大歓迎です、それは第3四半期の挿入ごとに起こります。
INSERT INTO leagues(start,Name,type,end,cashstock) VALUES( '2018-4-1', 'Quarter 2 2018', 'public', '2018-6-30', '7500' )
INSERT INTO leagues(start,Name,type,end,cashstock) VALUES( '2018-7-1', 'Quarter 3 2018', 'public', '2018-9-31', '7500' )
返品
Edit Edit
Copy Copy
Delete Delete
2018-04-01
Quarter 2 2018
3
public
2018-06-30
7500
Edit Edit
Copy Copy
Delete Delete
2018-07-01
Quarter 3 2018
4
public
0000-00-00
7500
答え :
解決策:
9月は30日しかありません。したがって、 2018-9-31
は無効な日付であるため、デフォルトの 0000-00-00
が挿入されます。
これを偶然に任せず、アプリケーションで有効な日付を確認するか、厳密モードを有効にすることでMySQLに処理させることをお勧めします:
strictモードが有効になっている場合、「0000-00-00」は許可されず、IGNOREも指定されていない限り、挿入によってエラーが発生します。 INSERTIGNOREおよびUPDATEIGNOREの場合、「0000-00-00」が許可され、挿入によって警告が生成されます。
または、
NO_ZERO_DATE
を使用することもできます:NO_ZERO_DATEモードは、サーバーが「0000-00-00」を有効な日付として許可するかどうかに影響します。その効果は、厳密なSQLモードが有効になっているかどうかにも依存します。
答え :
解決策:
MySQLを使用しているとは言っていませんが、間違いなくそうです。これはMySQLの落とし穴です。 MySQLに厳密であるように指示し、かなりの量のセットアップを行わない限り、MySQLは、そうでない場合でもサイレントに「動作」します。あなたはまさにそのようなケースに遭遇しました。
この場合、9月は30日しかないため、9月31日は正しくない日付です。 MySQLは失敗するのではなく、データベースに無効なデータを入力しました。これを防ぐため、またはエラーをより早く確認するには、InnoDB( MyISAM)を使用し、厳密モードを有効にすることをお勧めします。
コマンドラインからこれを実行すると、インターフェイスに警告カウントが表示され、その後、「SHOWWARNINGS」を実行して警告を表示します。
さらに、ドキュメントから:
MySQLでは、文字列として指定された値に対して「リラックスした」形式を使用できます。この形式では、日付部分または時間部分の間の区切り文字として任意の句読文字を使用できます。場合によっては、この構文はだまされている可能性があります。たとえば、「10:11:12」などの値は、:のために時間値のように見える場合がありますが、日付コンテキストで使用される場合は「2010-11-12」年として解釈されます。 「45」は有効な月ではないため、値「10:45:15」は「0000-00-00」に変換されます。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。