【发布时间】:2015-02-13 17:11:52
【问题描述】:
我有一个非常简单的查询:
SELECT count(*)
FROM `users`
where from_unixtime(reg_date/1000) >= '2014-12-17'
我的本地 mySQL 服务器: mysql Ver 14.14 Distrib 5.5.40,适用于使用 readline 6.3 的 debian-linux-gnu (i686)
远程服务器: mysql Ver 14.14 Distrib 5.5.40,适用于 debian-linux-gnu (x86_64) 使用 re
除了 32 位和 64 位之外,它们是相同的。
两个表中的总记录相同 - 257 行。
在服务器上运行查询得到的计数是 202。
在我的 PC 上运行查询得到的计数是 203。
同一个数据库,同一个表,users表中的相同行数,实际从服务器导出,PC表被截断,导入PC。
此外,在 PC 上执行此操作:
select
year(from_unixtime(reg_date/1000)) as year,
month(from_unixtime(reg_date/1000)) as month,
count(from_unixtime(reg_date/1000)) as the_count
from users
where from_unixtime(reg_date/1000) >= '2014-12-17'
group by 1,2
给我:
year month the_count
2014 12 21
2015 1 87
2015 2 95
ie:总共 203,但在服务器上,给了我:
year month the_count
2014 12 21
2015 1 90
2015 2 91
总数:202
我一生都无法弄清楚为什么会发生这种情况......
我读过其他帖子,但没有一个有帮助,因为他们在谈论加入和 ID 不正常等。
PC端查询工具:localhost/phpmyadmin
服务器查询工具:PC上的mySQL Workbench用证书等连接远程服务器
服务器和PC上的操作系统:
服务器:Ubuntu 14.04 Trusty
PC:Ubuntu 14.04 值得信赖
有没有人对我如何追踪这个有任何想法?
谢谢。
【问题讨论】:
-
你能检查你的数据库和客户端的语言环境吗?我看起来不太像时区影响。
-
@frian - 谢谢!我以为可能是这样,但遗憾的是,没有。在 PC 和服务器上运行“locale”命令会产生完全相同相同的输出:LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC=en_AU.UTF-8 LC_TIME =en_AU.UTF-8 LC_COLLATE="en_US.UTF-8" LC_MONETARY=en_AU.UTF-8 LC_MESSAGES="en_US.UTF-8" LC_PAPER=en_AU.UTF-8 LC_NAME=en_AU.UTF-8 LC_ADDRESS=en_AU.UTF -8 LC_TELEPHONE=en_AU.UTF-8 LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=en_AU.UTF-8 LC_ALL=唯一的区别是PC的LANGUAGE=en,其中服务器为空白。
-
@frian - 经过进一步检查,服务器的时区是 UTC。 PC 的时区是 AEST。我需要做一些改变! :) 感谢您的提示!