为什么日期时间列上的MySQL表分区会产生时区错误?

时间:2017-10-21 19:01:18

标签: mysql partitioning

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

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

我的问题是我的专栏是datetime NOT NULL我已经按照表格ID将其作为主键:

PRIMARY KEY (id, start_time)

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

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。这样的错误可能是什么原因?

1 个答案:

答案 0 :(得分:0)

  

22.2.1 RANGE Partitioning

     

...

     

使用DATE或DATETIME列按RANGE COLUMNS对表进行分区   作为分区栏。

     

...

尝试:

RewriteCond %{HTTP_HOST} ^www\. [OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R=301]

请参阅db-fiddle