MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

ALLOW_INVALID_DATES SQLモードとは?無効な日付を保存する方法を解説

その名前が示すとおり、ALLOW_INVALID_DATES SQLモードを有効にすると、テーブルに無効な日付を保存できるようになります。通常、MySQLの厳格モード(STRICTモード)では「1993-11-31」のように実在しない日付を挿入しようとするとエラーになりますが、このモードを設定すれば受け入れられるようになります。以下の具体例で動作を確認してみましょう。

使用例

mysql> SET sql_mode = ALLOW_INVALID_DATES;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> Insert Into detail_bday(Name, Birth_Date) values('Sonia','1993-11-31');
Query OK, 1 row affected (0.09 sec)

mysql> Insert Into detail_bday(Name, Birth_Date) values('Ram','0000-00-00');
Query OK, 1 row affected (0.10 sec)

mysql> Select * from detail_bday;
+----+---------+------------+
| Sr | Name    | Birth_Date |
+----+---------+------------+
|  1 | Saurabh | 1990-05-12 |
|  2 | Raman   | 1993-06-11 |
|  3 | Gaurav  | 1984-01-17 |
|  4 | Rahul   | 1993-06-11 |
|  5 | Sonia   | 1993-11-31 |
|  6 | Ram     | 0000-00-00 |
+----+---------+------------+
6 rows in set (0.00 sec)

上記の結果セットを見ると、ALLOW_INVALID_DATES SQLモードを有効にした後は、「1993-11-31」(11月は30日までしか存在しない)や「0000-00-00」といった無効な日付でもエラーなく保存できていることがわかります。

補足:注意点

このSQLモードが行うのは、月が1〜12の範囲内か、日が1〜31の範囲内かといった大まかな妥当性チェックのみです。そのため、2月30日のような実際には存在しない日付もそのまま挿入できてしまいます。データの整合性を保ちたい場合は、アプリケーション側での入力バリデーションと組み合わせて使うことをおすすめします。

  1. MySQLのINSERT IGNOREステートメントとは?重複データの挿入を防ぐ方法

    INSERT IGNOREステートメントは、MySQLのテーブルに重複したデータが挿入されるのを防ぐために使用されます。通常のINSERT文の代わりにINSERT IGNOREコマンドを使うと、新規レコードが既存レコードと重複していなければ通常どおり挿入されますが、重複している場合はIGNOREキーワードによってMySQLがそのレコードを黙って破棄し、エラーを発生させません。 基本構文 INSERT IGNORE INTO table_name(...) ここで、table_nameは値を挿入したいテーブルの名前です。カラム名とVALUES句の指定方法は通常のINSERT文と同じです。 動作の

  2. SQLのUPDATE文とは?基本的な使い方と実行例をわかりやすく解説

    UPDATE文とはUPDATE文(UPDATEコマンド)は、テーブルのレコードを編集するために使用されるデータ操作言語(DML)のコマンドです。条件に一致する特定の1行だけを更新することも、テーブル内のすべての行を更新することも、ユーザーが指定した条件に合致する複数の行をまとめて更新することもできます。UPDATE文は必ずSET句と組み合わせて使用し、どの列にどんな値を設定するかを指定します。さらにWHERE句を併用することで、更新対象となる行の条件を絞り込むことができます。基本構文UPDATE テーブル名SET 列名1 = 値1, 列名2 = 値2, ...WHERE 条件;使用例1:条件を