为什么 MySQL table 在日期时间列上进行分区会产生时区依赖错误?

Why MySQL table partitioning on a datetime column gives error of timezone dependent?

我遇到过几个问题,比如我的问题:

还有一些其他的。他们都解释了同样的问题,但他们不是我的问题。

我的问题是 我的专栏是 datetime NOT NULL 并且我已经通过 table id:

将其设为主键
PRIMARY KEY (id, start_time)

现在我使用下面的命令对我的 table 进行分区:

alter table MY_TABLE partition by range (UNIX_TIMESTAMP(start_time)) ( 
partition p2012 values less than (UNIX_TIMESTAMP('2012-01-01 00:00:00')),
partition p2013 values less than (UNIX_TIMESTAMP('2013-01-01 00:00:00')), 
partition p2014 values less than (UNIX_TIMESTAMP('2014-01-01 00:00:00')), 
partition p2015 values less than (UNIX_TIMESTAMP('2015-01-01 00:00:00')), 
partition p2016 values less than (UNIX_TIMESTAMP('2016-01-01 00:00:00')),
partition p2017 values less than (UNIX_TIMESTAMP('2017-01-01 00:00:00')), 
partition pfuture values less than (MAXVALUE));

一切似乎都是正确的,当我 describe MY_TABLE 它给出了以下信息:

start_time        | datetime         | NO   | PRI | 0000-00-00 00:00:00

当运行上面的分区命令我得到错误:

ERROR 1486 (HY000): Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed

datetime 不像 timestamp 那样依赖于时区,也不像 constant。这种错误的原因可能是什么?

22.2.1 RANGE Partitioning

...

Partition the table by RANGE COLUMNS, using a DATE or DATETIME column as the partitioning column.

...

尝试:

ALTER TABLE `MY_TABLE`
PARTITION BY RANGE COLUMNS (`start_time`)
(
  PARTITION `p2012` VALUES LESS THAN ('2012-01-01 00:00:00'),
  PARTITION `p2013` VALUES LESS THAN ('2013-01-01 00:00:00'), 
  PARTITION `p2014` VALUES LESS THAN ('2014-01-01 00:00:00'), 
  PARTITION `p2015` VALUES LESS THAN ('2015-01-01 00:00:00'), 
  PARTITION `p2016` VALUES LESS THAN ('2016-01-01 00:00:00'),
  PARTITION `p2017` VALUES LESS THAN ('2017-01-01 00:00:00'), 
  PARTITION `pfuture` VALUES LESS THAN (MAXVALUE)
);

参见db-fiddle