mroongaストレージエンジンにはいくつか制限があります。
テーブルには以下の制限があります。この制限はgroongaに由来します。
実際には他の諸条件の制約により上記の値まで到達しない場合もあります。
1つのインデックスにおける論理上の上限値は以下のとおりです。テーブルごとに適用されるgroonga由来の制限です。
実際には他の諸条件の制約により上記の値まで到達しない場合もあります。
テーブルがこの制限に該当するかは SHOW TABLE STATUS や SHOW INDEX FROM ... などで確認してください。
ストレージモードにおいて、DATE、DATETIME型のカラムには制限があります。
mroongaストレージエンジンは月や日の値に指定された0を1へと自動的に補正します。
つまり、0月は1月へ、0日は1日として扱います。
そして、NULL値はUNIX時間の0秒 (1970-01-01)として扱います。
上記挙動を示す例はこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | CREATE TABLE date_limitation (
id INT PRIMARY KEY AUTO_INCREMENT,
input varchar(32) DEFAULT NULL,
date DATE DEFAULT NULL
) ENGINE=mroonga DEFAULT CHARSET=UTF8;
CREATE TABLE datetime_limitation (
id INT PRIMARY KEY AUTO_INCREMENT,
input varchar(32) DEFAULT NULL,
datetime DATETIME DEFAULT NULL
) ENGINE=mroonga DEFAULT CHARSET=UTF8;
-- Test data for date_limitation
INSERT INTO date_limitation (input) VALUES ("NULL");
INSERT INTO date_limitation (input, date) VALUES ("1970-00-00", "1970-00-00");
-- Test data for datetime_limitation
INSERT INTO datetime_limitation (input) VALUES ("NULL");
INSERT INTO datetime_limitation (input, datetime) VALUES ("1970-00-00 00:00:00", "1970-00-00 00:00:00");
|
実行結果はこちらです。:
mysql> select * from date_limitation;
+----+------------+------------+
| id | input | date |
+----+------------+------------+
| 1 | NULL | 1970-01-01 |
| 2 | 1970-00-00 | 1970-01-01 |
+----+------------+------------+
2 rows in set (0.00 sec)
mysql> select * from datetime_limitation;
+----+---------------------+---------------------+
| id | input | datetime |
+----+---------------------+---------------------+
| 1 | NULL | 1970-01-01 00:00:00 |
| 2 | 1970-00-00 00:00:00 | 1970-01-01 00:00:00 |
+----+---------------------+---------------------+
2 rows in set (0.00 sec)