- 积分
- 267
- UID
- 15234
- 阅读权限
- 20
- 注册时间
- 2014-2-12
- 精华
- 在线时间
- 小时
- 最后登录
- 1970-1-1
- 职业
- 1
|
前两天,接到一部门的需求,通过文件导入的方式将一批数据录入到MySQL中。
结果发现数据库记录的操作时间和录入的时间相差8个小时,录入时间是通过now()函数进行的。
检查了好半天,发现文件头部包含有对时区的设置。
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
而在中国,系统的时区一般是东八区(+0800)。
db-linux1:~ # date -R
Wed, 19 Nov 2014 11:50:37 +0800
如果使用非+0800时区设置数据库变量,会影响到MySQL的一些时间函数的结果,如now()。
我们可以测试一下,
mysql> select now(); //设置时区前
+---------------------+
| now() |
+---------------------+
| 2014-11-19 11:37:39 |
+---------------------+
1 row in set (0.00 sec)
mysql> set @OLD_TIME_ZONE=@@TIME_ZONE;
Query OK, 0 rows affected (0.00 sec)
mysql> SET TIME_ZONE='+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select now(); //设置时区后
+---------------------+
| now() |
+---------------------+
| 2014-11-19 03:37:57 |
+---------------------+
1 row in set (0.00 sec)
细节决定成败,路还很长,细心最重要。
|
|