MariaDB 相关子查询中 DateTimes 的截断
Truncation of DateTimes in correlated subqueries in MariaDB
我的一个 group-wise maximum 查询返回了意外结果。我将其提炼为以下问题:
DROP TABLE IF EXISTS maria_bug;
CREATE TABLE maria_bug (
id INT NOT NULL,
update_time TIMESTAMP(6) NOT NULL
);
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.200000');
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.100000');
SELECT
m1.id,
m1.update_time t1,
(SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id) t2
FROM maria_bug m1;
在 MySQL 5.6 上,我得到这个:
1 2001-01-01 00:00:00.200000 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000 2001-01-01 00:00:00.200000
在 MariaDB (10.0.13) 上:
1 2001-01-01 00:00:00.200000 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000 2001-01-01 00:00:00.000000
为什么会这样?? MYSQL 行为是我所期望的。 MariaDB 的某处是否缺少我的设置?这在某处记录了吗?当然,这不可能是数据库中的错误,因为这是一个非常常见的查询:
SELECT COUNT(*) FROM maria_bug m1
WHERE update_time < (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id)
上述查询 returns 1
在 MYSQL 中符合预期,但在 MariaDB 中 0
。
这似乎是 MariaDB 的错误,因为数据 returns 与 table 中的数据不同。
mysql> SELECT *, (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id <> 0 ) max_update FROM maria_bug m1;
+----+----------------------------+----------------------------+
| id | update_time | max_update |
+----+----------------------------+----------------------------+
| 1 | 2001-01-01 00:00:00.200000 | 2001-01-01 00:00:00.200000 |
| 1 | 2001-01-01 00:00:00.100000 | 2001-01-01 00:00:00.000000 |
+----+----------------------------+----------------------------+
2 rows in set (0.00 sec)
错误已提交给 MariaDB:
https://jira.mariadb.org/browse/MDEV-9707
更新:MariaDB 已确认该错误。
我的一个 group-wise maximum 查询返回了意外结果。我将其提炼为以下问题:
DROP TABLE IF EXISTS maria_bug;
CREATE TABLE maria_bug (
id INT NOT NULL,
update_time TIMESTAMP(6) NOT NULL
);
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.200000');
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.100000');
SELECT
m1.id,
m1.update_time t1,
(SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id) t2
FROM maria_bug m1;
在 MySQL 5.6 上,我得到这个:
1 2001-01-01 00:00:00.200000 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000 2001-01-01 00:00:00.200000
在 MariaDB (10.0.13) 上:
1 2001-01-01 00:00:00.200000 2001-01-01 00:00:00.200000
1 2001-01-01 00:00:00.100000 2001-01-01 00:00:00.000000
为什么会这样?? MYSQL 行为是我所期望的。 MariaDB 的某处是否缺少我的设置?这在某处记录了吗?当然,这不可能是数据库中的错误,因为这是一个非常常见的查询:
SELECT COUNT(*) FROM maria_bug m1
WHERE update_time < (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id)
上述查询 returns 1
在 MYSQL 中符合预期,但在 MariaDB 中 0
。
这似乎是 MariaDB 的错误,因为数据 returns 与 table 中的数据不同。
mysql> SELECT *, (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id <> 0 ) max_update FROM maria_bug m1;
+----+----------------------------+----------------------------+
| id | update_time | max_update |
+----+----------------------------+----------------------------+
| 1 | 2001-01-01 00:00:00.200000 | 2001-01-01 00:00:00.200000 |
| 1 | 2001-01-01 00:00:00.100000 | 2001-01-01 00:00:00.000000 |
+----+----------------------------+----------------------------+
2 rows in set (0.00 sec)
错误已提交给 MariaDB: https://jira.mariadb.org/browse/MDEV-9707
更新:MariaDB 已确认该错误。