本节讨论与分区表达式中使用的功能有关的MySQL分区中的限制。
在分区表达式中只允许下表中显示的MySQL函数。
ABS() | CEILING() (见 CEILING()和FLOOR()) | DAY() |
DAYOFMONTH() | DAYOFWEEK() | DAYOFYEAR() |
DATEDIFF() | EXTRACT() (参见 EXTECT()函数与WEEK说明符) | FLOOR() (见 CEILING()和FLOOR()) |
HOUR() | MICROSECOND() | MINUTE() |
MOD() | MONTH() | QUARTER() |
SECOND() | TIME_TO_SEC() | TO_DAYS() |
TO_SECONDS() | UNIX_TIMESTAMP() (允许从MySQL 5.6.1开始,完全支持MySQL 5.6.3开头, TIMESTAMP 列) | WEEKDAY() |
YEAR() | YEARWEEK() |
在MySQL 5.6,范围优化可以用于TO_DAYS()
, TO_SECONDS()
和 YEAR()
功能。此外,从MySQL 5.6.3开始, UNIX_TIMESTAMP()
在分区表达式中被视为单调的。有关更多信息,请参见 第19.4节“分割修剪”。
CEILING()和FLOOR()。 每个这些函数只有在传递一个精确数字类型的参数(例如其中一个INT
类型或类型) 时才返回一个整数DECIMAL
。这意味着,例如,以下CREATE TABLE
语句失败并显示错误,如下所示:
mysql> CREATE TABLE t (c FLOAT) PARTITION BY LIST( FLOOR(c) )(
-> PARTITION p0 VALUES IN (1,3,5),
-> PARTITION p1 VALUES IN (2,4,6)
-> );
ERROR 1490 (HY000): The PARTITION function returns the wrong type
EXTRACT()函数与WEEK说明符。 函数返回的值 EXTRACT()
用作时,取决于系统变量的值 。因此,从MySQL 5.6.2开始,当将该单元指定为时, 不再允许作为分区函数。(错误#54483) EXTRACT(WEEK FROM
col
)default_week_format
EXTRACT()
WEEK