[groonga-dev,03457] Re: Mroonga の timestamp 型の範囲について

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 9月 2日 (水) 22:47:18 JST


須藤です。

In <20150****@domai*****>
  "[groonga-dev,03450] Mroonga の timestamp 型の範囲について" on Wed, 02 Sep 2015 13:47:15 +0900,
  各務 洋 <kagam****@outwa*****> wrote:

> mktime を使用しているという事は、それぞれの使用しているOS由来の範囲
> (time_t)になるという認識でよいでしょうか?

はい、そうです。

> ここで1点気になったのが、Mroonga の timestamp 型 についてです。
> これだけ、まだ「0000-00-00 00:00:00」が保存可能なのです。
> (既存のレコードにも存在しています)
> 
> そこで質問なのですが、
> 
> 1.Mroonga の timestamp 型 は「0000-00-00 00:00:00」が存在しても良いものなのか。

よいです。

Groonga的にはこのときは0秒という値を持っています。
UNIX秒なので1970-01-01 00:00:00という時刻を表す値です。

MroongaはGroongaのこの値をMySQLに渡します。
MySQLはTIMESTAMP型の0秒という情報を「0000-00-00 00:00:00」と
して扱います。

よって、(MySQL的に)「0000-00-00 00:00:00」という値が存在し
ます。Groonga的にこの値と同等の値の0秒という値は、Groonga的
には「1970-01-01 00:00:00」というGroongaにとって妥当な値なの
で問題ありません。

> 2.この値は index には影響ないのか?

ありません。
「0000-00-00 00:00:00」で検索してもインデックスを使って検索
できます。

> -- おまけ
> 
> INSERT INTO tbl_test_pat_0007 (t_datetime, t_timestamp, t_date, t_value) VALUES ('2038/2/1 12:34:56', '2038/2/1 12:34:56', '2038/2/1', 'test1');                                                                                      
>> Query OK, 1 row affected, 1 warning (0.00 sec)
> 
> SHOW WARNINGS;
> +---------+------+------------------------------------------------------+
> | Level   | Code | Message                                              |
> +---------+------+------------------------------------------------------+
> | Warning | 1264 | Out of range value for column 't_timestamp' at row 1 |
> +---------+------+------------------------------------------------------+
> 1 row in set (0.00 sec)
> 
> 
> SELECT * FROM tbl_test_pat_0007;                                                                                                                                                                                                      
> +----+---------------------+---------------------+------------+---------+
> | id | t_datetime          | t_timestamp         | t_date     | t_value |
> +----+---------------------+---------------------+------------+---------+
> |  1 | 0000-01-01 00:00:00 | 0000-00-00 00:00:00 | 0000-01-01 | test1   |
> |  2 | 2038-02-01 12:34:56 | 0000-00-00 00:00:00 | 2038-02-01 | test1   |
> +----+---------------------+---------------------+------------+---------+
> 2 rows in set (0.00 sec)

TIMESTAMP側の範囲はMySQLがチェックしてくれていますね。


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




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