[groonga-dev,01035] mroongaエンジンのdatetime型について

Back to archive index

中谷宗嵩 nakatani_munet****@flyin*****
2012年 9月 12日 (水) 23:11:03 JST


株式会社フライングラインの中谷です。
mroonga、いつも便利に利用させていただいております。


表題の件ですが、mroongaエンジンを使ったテーブルで、
datetime型のカラムにインサートを行ったところ、
意図していないデータが登録されてしまったため、報告させていただきます。
詳細は以下をご覧下さい。


【環境】
・CentOS6.2
・MySQL5.1.61
・mroonga2.0.3


【テーブル構造】
mysql> show create table datetime_test \G
*************************** 1. row ***************************
       Table: datetime_test
Create Table: CREATE TABLE `datetime_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `input` varchar(254) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=mroonga DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


【データ】
上記のテーブルに下記6点のデータをインサートしました。
------------------------------------------
・mysql> insert into datetime_test (input,datetime) values ('NULL',NULL);
・mysql> insert into datetime_test (input,datetime) values ('1000-01-01
00:00:00','1000-01-01 00:00:00');
・mysql> insert into datetime_test (input,datetime) values ('9999-12-31
23:59:59','9999-12-31 23:59:59');
・mysql> insert into datetime_test (input,datetime) values ('2038-01-19
03:14:07','2038-01-19 03:14:07');
・mysql> insert into datetime_test (input,datetime) values ('2038-01-19
03:14:08','2038-01-19 03:14:08');
・mysql> insert into datetime_test (input,datetime) values ('2012','2012');
------------------------------------------
※確認しやすいように、datetimeカラムにインサートする日付を、inputカラムにvarchar型で入力しています。


そのselect結果が以下になります。

mysql> select * from datetime_test ;
+----+---------------------+---------------------+
| id | input               | datetime            |
+----+---------------------+---------------------+
|  1 | NULL                | 1970-01-01 00:00:00 |
|  2 | 1000-01-01 00:00:00 | 1987-04-15 03:01:07 |
|  3 | 9999-12-31 23:59:59 | 1970-01-09 21:47:45 |
|  4 | 2038-01-19 03:14:07 | 2038-01-19 03:14:07 |
|  5 | 2038-01-19 03:14:08 | 1901-12-13 20:45:52 |
|  6 | 2012                | 2034-08-29 05:43:15 |
+----+---------------------+---------------------+
6 rows in set (0.00 sec)


このように、本来datetime型で入るはずの日付が、違う日付に変わってしまっています。
また、2038年問題と思われる現象も起きているようです。
参考までに、同じ内容をInnoDBのテーブルで入力したところ、下記の結果が得られます。

mysql> select * from datetime_test2;
+----+---------------------+---------------------+
| id | input               | datetime            |
+----+---------------------+---------------------+
|  1 | NULL                | NULL                |
|  2 | 1000-01-01 00:00:00 | 1000-01-01 00:00:00 |
|  3 | 9999-12-31 23:59:59 | 9999-12-31 23:59:59 |
|  4 | 2038-01-19 03:14:07 | 2038-01-19 03:14:07 |
|  5 | 2038-01-19 03:14:08 | 2038-01-19 03:14:08 |
|  6 | 2012                | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
6 rows in set (0.00 sec)


現象は以上になります。

私の環境に問題がありそうであれば、その箇所を教えていただけますと幸いです。
どうぞよろしくお願い致します。


-----------------------------------------
株式会社 フライングライン
中谷 宗嵩

東京都中央区銀座8-11-11 TK銀座8丁目ビル
URL: http://www.flyingline.co.jp/
Tel: 03-5537-0390 Fax: 03-5537-0391
Mail: nakatani_munet****@flyin*****

書評サイト『本が好き!』
http://www.honzuki.jp/

これから発売される本の検索が出来る
「近刊情報サーチ」
http://comingbook.honzuki.jp/




groonga-dev メーリングリストの案内
Back to archive index