概要
PHPでHandlerSocketを使っていると、カラムが数値型とか文字・文字列型を使っている場合はそのまま使えるが、DATETIME型とかだと使えるのか心配になるので、試した。
結論:わりと普通に使える。(っぽい)
テスト用のテーブル
CREATE TABLE test (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
VALUE VARCHAR(63) NOT NULL DEFAULT '',
dt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4
;
テストしたコード
$res = $hs->insert(['dt' => 1463640000 ]);
var_dump($res); // int(1)
/*
mysql> select * from test;
+----+-------+---------------------+
| id | value | dt |
+----+-------+---------------------+
| 1 | | 0000-00-00 00:00:00 |
+----+-------+---------------------+
1 row in set (0.00 sec)
*/
$res = $hs->insert(['dt' => date('Y-m-d h:i:s') ]);
var_dump($res); // int(2)
/*
mysql> select * from test;
+----+-------+---------------------+
| id | value | dt |
+----+-------+---------------------+
| 2 | | 2016-05-19 01:23:45 |
+----+-------+---------------------+
2 rows in set (0.00 sec)
$res = $hs->insert(['dt' => date('Y-m-d') ]);
var_dump($res); // int(3)
/*
mysql> select * from test;
+----+-------+---------------------+
| id | value | dt |
+----+-------+---------------------+
| 3 | | 2016-05-19 00:00:00 |
+----+-------+---------------------+
*/
$res = $hs->insert(['dt' => date('Y/m/d') ]);
var_dump($res); // int(4)
/*
mysql> select * from test;
+----+-------+---------------------+
| id | value | dt |
+----+-------+---------------------+
| 4 | | 2016-05-19 00:00:00 |
+----+-------+---------------------+
4 rows in set (0.00 sec)
*/
他、おまけてきなやつ
PKに time() の戻り値を入れる。
time()の商を入れるなどすれば、「1時間毎に、最初にアクセスしてきた人に~」とかできそう。
$res = $hs->insert(['id' => time() ]);
var_dump($res); // int(0)
/*
mysql> select * from test;
+------------+-------+---------------------+
| id | value | dt |
+------------+-------+---------------------+
| 1463640000 | | 0000-00-00 00:00:00 |
+------------+-------+---------------------+
1 row in set (0.00 sec)
*/
後で調べること
HandlerSocketが、たしかHandlerInterfaceを直接叩くみたいな感じの実装をしてるってスライドで言ってた気がするので、そのへんの実装をちゃんと読みたい。