MySQL 5.6 中计数函数的奇怪行为
Strange behavior with count function in MySQL 5.6
我有一个修复查询如下,我试图理解一些奇怪的行为是每当我 运行 这个查询在不同的时刻我得到不同的结果:( 134 , 143, 147, 152, 158 )
这是在创建时定义的 table:
`user_registration_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
select count(*) 来自 user_registration_timestamp
>= "2016-10-03 12:33:26" 的用户
和 user_registration_timestamp
< "2016-10-03 15:33:26";
为什么会这样?时间戳是固定的,它不是可变的,那么看到 MySQL 这种奇怪行为的原因是什么?
只要有新用户注册,您的查询就会 return 不同的计数。如果将 COUNT(*)
替换为 *
.
,您可以找到详细信息
我的猜测是您尚未真正验证这一点,因为您假设 2016-10-03 15:33:26
是过去的日期,因此不可能有新用户。事实上,它是 当地时间 并且截至目前 (2016-10-03 14:30 UTC
) 它是东部时区的过去日期,并且仍然会在其他任何地方出现。
如果 MySQL 服务器未配置为使用您的本地时区,但您的代码假定如此,那么它可能会造成混淆。
我有一个修复查询如下,我试图理解一些奇怪的行为是每当我 运行 这个查询在不同的时刻我得到不同的结果:( 134 , 143, 147, 152, 158 )
这是在创建时定义的 table:
`user_registration_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
select count(*) 来自 user_registration_timestamp
>= "2016-10-03 12:33:26" 的用户
和 user_registration_timestamp
< "2016-10-03 15:33:26";
为什么会这样?时间戳是固定的,它不是可变的,那么看到 MySQL 这种奇怪行为的原因是什么?
只要有新用户注册,您的查询就会 return 不同的计数。如果将 COUNT(*)
替换为 *
.
我的猜测是您尚未真正验证这一点,因为您假设 2016-10-03 15:33:26
是过去的日期,因此不可能有新用户。事实上,它是 当地时间 并且截至目前 (2016-10-03 14:30 UTC
) 它是东部时区的过去日期,并且仍然会在其他任何地方出现。
如果 MySQL 服务器未配置为使用您的本地时区,但您的代码假定如此,那么它可能会造成混淆。