为什么default_week_format变量适用于WEEK但不适用于YEARWEEK

时间:2013-01-09 15:43:25

标签: mysql datetime global-variables system-variable

我之前发布了一个问题,该问题得到了正确回答,并让我发现我的YEARWEEK()函数使用默认模式为零,并且给了我不想要的结果。我阅读了YEARWEEK的手册,该手册引用了我关于模式的WEEK,它说,如果没有使用模式参数,则使用default_week_format值。我决定我想要模式6,所以我采取了必要的步骤将变量更改为6.但是,只有WEEK()函数受此更改的影响。

我得到以下结果:

SELECT YEARWEEK(NOW())
  201301
SELECT YEARWEEK(NOW(), 6)
  201302
SELECT WEEK(NOW())
  2
SELECT WEEK(NOW(), 6)
  2

这是MySQL的问题还是我做错了什么?我阅读了几本手册,并在YEARWEEK描述中明确指出“模式参数与WEEK()的模式参数完全相同”。但是,它没有特别说明(如在WEEK描述中那样),“如果省略mode参数,则使用default_week_format系统变量的值”。

如果没有提供变量值,YEARWEEK()是否应该使用变量的值,或者我在这方面是错的?在我看来,这两个函数的行为应该相同,特别是因为其中一个引用了另一个函数的特定部分。

1 个答案:

答案 0 :(得分:1)

  

YEARWEEK()不应该使用变量的值,如果没有提供,或者我在这方面是错的吗?

虽然我理解了这个论点,但这是记录在案的,因此预期的行为。来自default_week_format上的文档:

  

用于WEEK()功能的默认模式值。

因此,此系统变量用于WEEK()。但是,如您所述,两个函数都允许week_format作为第二个参数。因此,我建议您不要在服务器级别设置此项,但为了清晰起见,请在代码中设置。