2月30日などの無効な日付をMySQLの日付型カラムに保存する方法
2月30日などの無効な日付をMySQLに保存するには?
2月30日のような実際には存在しない日付をMySQLのテーブルに保存したい場合は、あらかじめ「ALLOW_INVALID_DATES」モードを有効にしておく必要があります。
例えば、ALLOW_INVALID_DATESモードが無効な状態でこのような日付を挿入しようとすると、MySQLは以下のようなエラーを返します。
mysql> Insert into date_testing(date) values('2017-02-30');
ERROR 1292 (22007): Incorrect date value: '2017-02-30' for column
'Date' at row 1このエラーを回避するには、まず以下のようにALLOW_INVALID_DATESモードを有効にします。
mysql> SET sql_mode = 'ALLOW_INVALID_DATES';
Query OK, 0 rows affected (0.00 sec)
mysql> Insert into date_testing(date) values('2017-02-30');
Query OK, 1 row affected (0.14 sec)
mysql> select * from date_testing;
+------------+
| Date |
+------------+
| 2017-02-30 |
+------------+
1 row in set (0.00 sec)
上記のように、ALLOW_INVALID_DATESモードを有効にした後は、通常なら不正とみなされる日付でもそのままカラムに挿入できるようになります。MySQLは月や日の妥当性(例:2月31日など)をチェックせず、範囲の数値としてのみ検証します。
設定時の注意点
「SET sql_mode = 'ALLOW_INVALID_DATES';」による設定は、現在のセッションにのみ適用されます。すべての接続に対して恒久的に有効化したい場合は、「SET GLOBAL sql_mode = 'ALLOW_INVALID_DATES';」を実行するか、設定ファイル(my.cnf / my.ini)のsql_modeに追記してください。
また、無効な日付を保存できる一方で、アプリケーション側で日付の整合性を保証しないとデータ不整合の原因になるため、利用は必要最小限にとどめることをおすすめします。
-
Javaを使ってDATE型の値をMySQLカラムに挿入する方法【PreparedStatement活用】
はじめに JavaからMySQLのDATE型カラムに日付データを挿入したい場合、PreparedStatementを使用するのが最も安全で推奨される方法です。SQLインジェクション対策にもなり、日付型の変換もスムーズに行えます。 本記事では、Javaプログラムから現在の日付をMySQLテーブルに挿入する手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルの作成 まず、DATE型のカラム「ArrivalDate」を含むテーブルを作成します。以下はMySQLでの作成例です。 mysql> create table DemoTable( PassengerId
-
MySQLでシーケンスを作成する方法|AUTO_INCREMENTの使い方とルールを解説
MySQLにおけるシーケンスとは?MySQLにおける「シーケンス」とは、1(指定した場合は0)から始まり、昇順で自動生成される整数の連番のことです。多くのアプリケーションでは、レコードを一意に識別するための番号を発行する目的でシーケンスが利用されています。具体例代表的な例としては、CRMシステムの顧客ID、人事管理システムの社員番号、設備管理システムの機器番号などが挙げられます。MySQLでシーケンスを自動的に作成するには、対象のカラムにAUTO_INCREMENT属性を設定します。通常は、主キー(PRIMARY KEY)カラムに対して適用するのが一般的です。AUTO_INCREMENTを使用