LINUX时区设置及与数据库之间(ORACLE MYSQL)的关系

LINUX时区
   LINUX 操作系统时区由/etc/localtime设置,其可以是一个指向/usr/share/zoneinfo下文件的软连接,
当然也可以拷贝,在/usr/share/zoneinfo目录下每个文件都包含了特定地区的时区信息,很多都分为
洲目录/地区目录 
如:
UTC:GMT标准时间+0时区
CET:欧洲中部时间
EST:美国东部标准时间
Asia/Shanghai:中国上海+8时区  (亚洲目录/上海地区)
我们可以简单的建立一个连接
cd /etc
ln -s  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime 
[root@testmy etc]# date -R
Wed, 07 Dec 2016 06:30:53 +0800
[root@testmy etc]# unlink localtime
[root@testmy etc]# ln -s  /usr/share/zoneinfo/UTC  /etc/localtime 
[root@testmy etc]# date -R
Tue, 06 Dec 2016 22:31:18 +0000

也可以拷贝:
[root@testmy etc]# cp /usr/share/zoneinfo/UTC localtime
cp: overwrite `localtime'? y
[root@testmy etc]# date
Wed Dec  7 00:13:22 UTC 2016
[root@testmy etc]# cp /usr/share/zoneinfo/Asia/Shanghai localtime
cp: overwrite `localtime'? y
[root@testmy etc]# date
Wed Dec  7 08:13:41 CST 2016

可以看到时区的变换,注意时区更改变数据库某些函数的返回

ORACLE数据库SYSDATE和SYSTIMESTAMP函数的返回将会随着系统时区的改变而改变,LOCALTIMESTAMP
CURRENT_TIMESTAMP和CURRENT_DATE ,它们跟随的是会话级别的时区也就是应用连接本地时区
下来是来自metalink的描述:

LOCALTIMESTAMP returns the current date and time in the session time zone in
 a value of datatype TIMESTAMP, that is date time similar to CURRENT_DATE 
 but the datatype is TIMESTAMP.
 
CURRENT_TIMESTAMP returns the current date and time in the session time zone,
 in a value of datatype TIMESTAMP WITH TIME ZONE, that is date time similar to 
 CURRENT_DATE but the datatype is TIMESTAMP WITH TIME ZONE.

SYSTIMESTAMP returns the system date, including fractional seconds and time zone,
 of the system on which the database resides. The return type is TIMESTAMP WITH 
 TIME ZONE. Unlike SYSDATE, which you can set to a constant using FIXED_DATE, 
 SYSTIMESTAMP will give the system date even though FIXED_DATE is set.
 
"SYSDATE" and "SYSTIMESTAMP" are purely dependent on the operating system clock, 
hence it IS depending on the timezone information of this operating system and/or 
the operating system settings when the database and listener where started.

列子:
SQL>  select to_CHAR(systimestamp,'YYYY-MM-DD HH24:MI:SS:TZR') from dual;
TO_CHAR(SYSTIMESTAMP,'YYYY-MM-
----------------------------------------------------
2016-12-06 23:00:16:+00:00

更改系统时区后,重新连接一个session
SQL>  select to_CHAR(systimestamp,'YYYY-MM-DD HH24:MI:SS:TZR') from dual;
TO_CHAR(SYSTIMESTAMP,'YYYY-MM-
----------------------------------------------------
2016-12-07 07:00:58:+08:00

看到时区改变了

MYSQL数据库如果设置参数:
time_zone 为system,那么代表每一个连接线程使用服务器OS的系统时间
那么时区受
| system_time_zone                   | UTC               |
的影响,可以看到我这里是UTC标准时区
那么这个时候某些函数如now(),current_time(),sysdate()都将受到影响,
但是和ORACLE不同如果MYSQL数据库不重启数据库将不会受到影响

列子:
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)

mysql> select now(),current_time(),sysdate();
+---------------------+----------------+---------------------+
| now()               | current_time() | sysdate()           |
+---------------------+----------------+---------------------+
| 2016-12-06 23:06:17 | 23:06:17       | 2016-12-06 23:06:17 |
+---------------------+----------------+---------------------+
更改OS时区后重启MYSQL数据库
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)

mysql> select now(),current_time(),sysdate();
+---------------------+----------------+---------------------+
| now()               | current_time() | sysdate()           |
+---------------------+----------------+---------------------+
| 2016-12-07 07:07:11 | 07:07:11       | 2016-12-07 07:07:11 |
+---------------------+----------------+---------------------+
1 row in set (0.00 sec)
可以看到时区改变。
当然time_zone是连接级别可以设置的,我们可以设置它为正确的时区,而不依赖
OS的时区如:set global  time_zone = '+8:00'; 

最后还是给出一段简单的代码用于查看时区的变化对系统时间的影响

gaopeng@bogon:~/linuxapinew$ TZ="Asia/Shanghai"  ./a.out 
ctime() is:Wed Dec 28 19:15:55 2016
asmtime is:Wed Dec 28 19:15:55 2016
gaopeng@bogon:~/linuxapinew$ TZ="UTC"  ./a.out              
ctime() is:Wed Dec 28 11:16:01 2016
asmtime is:Wed Dec 28 11:16:01 2016

代码如下:

点击(此处)折叠或打开

  1. /*************************************************************************
  2.     > File Name: timezone.c
  3.     > Author: gaopeng QQ:22389860 all right reserved
  4.     > Mail: gaopp_200217@163.com
  5.     > Created Time: Wed 28 Dec 2016 06:57:50 PM CST
  6.  ************************************************************************/
  7. #include<stdio.h>
  8. #include <time.h>
  9. #include <errno.h>
  10. int main(void)
  11. {
  12.         time_t t;
  13.         struct tm *loc;
  14.         char* ctc;
  15.         char* asc;
  16.         t = time(NULL);
  17.         ctc = ctime(&t);
  18.         if ((loc = localtime(&t)) ==NULL)
  19.         {
  20.                 perror("localtime:");
  21.         }
  22.         asc = asctime(loc);
  23.         printf("ctime() is:%sasmtime is:%s",ctc,asc);
  24.         return 0;
  25. }
时间: 2024-10-24 21:02:25

LINUX时区设置及与数据库之间(ORACLE MYSQL)的关系的相关文章

DB2数据库与Oracle数据库之间远程复制

一.背景 DB2 联合数据库是分布式数据库管理的特殊形式.在联合数据库系统中,可以通过一个 SQL 命令来发出对多个数据源的命令请求.DB2 与非 DB2 数据库之间进行复制之前,首先需要保证非 DB2 数据源可以被 DB2 ESE Version 8 federated database访问.对于DB2 Replication Version 8 所需的联合数据库功能可以在现有发布的 DB2 ESE Version 8 和 DB2 Connect Enterprise Edition Vers

Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录(转)

简介 之前也在linux下安装过oralce,可每次都是迷迷糊糊的,因为大脑一片空白,网上随便看见一个文档就直接复制,最后搞了乱七八糟,虽然装上了,却乱得很,最近几天因为离职,交接的时候又要安装oracle,发现老遇到错误,导致装不上了,通过这次我好好的研究了下oracle,非要搞清楚它,现在记录下来,希望能给其他网上朋友遇到问题时提供点帮助,该篇文件借鉴大量网友的总结,首先谢谢他们! 安装环境 Linux 服务器: SuSe11-linux      64/32位 Oracle服务器: Ora

Linux下设置Oracle自启动

测试机总是断电,导致重启后Oracle不自动重启,需要手工操作,因此可以设置成自启动模式. 操作系统:Linux 数据库:Oracle 10g 1.vi /etc/oratab 找到bisal:/opt/oracle/102:N,将N设为Y. 文件的注释: # This file is used by ORACLE utilities.  It is created by root.sh # and updated by the Database Configuration Assistant

Linux查看设置系统时区

     关于时区的概念,其实初中地理课已经涉及,很多人都多少了解一些,可能只是细节搞不太清楚.为什么会将地球分为不同时区呢?因为地球总是自西向东自转,东 边总比西边先看到太阳,东边的时间也总比西边的早.东边时刻与西边时刻的差值不仅要以时计,而且还要以分和秒来计算.整个地球分为二十四时区,每个时区都 有自己的本地时间.在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated).UTC与格林尼治平均时(GMT, Gree

oraclo-关于网站与oracle数据库之间的调用

问题描述 关于网站与oracle数据库之间的调用 一个网站与数据库之间是怎样进行数据的传输调用的呢?求大神指点! 解决方案 同一个计算机,一般是通过内存管道,不同的计算机,一般是tcpip协议.不过这些都封装在数据库驱动里了. 解决方案二: 网站是由代码编写的,然后编写网站的编程语言提供了与数据库的连接.操作方法, 你只要使用它给你的方法就可以连接数据库,获取数据库的数据,写入数据到数据库等操作了 解决方案三: 网站请求数据库数据的时候是这样的:假如你点击了一个商品,就会进入商品的详细页面,这时

三大数据库之间对比

数据|数据库 2004-11-16当前最流行的三大数据库之间对比:mysql        sql-server          oracle mysql 用户变量:set @varialname={ integer expression | real expression | string expression }sql-server 用户变量:declare @varialname integerset @varialname=必须是数字型:declare @varialname varc

MariaDB与MySQL数据库之间有什么区别

老蒋前天在Linux 128MB小内存VPS服务器中安装网站环境环境的时候默认安装的是MySQL数据库,发现在运行脚本过程编译的时候内存不够用导致无法安装,而且即便安装成功占用的内存资源还是比较大的.后面就更换采用MariaDB数据库取代MySQL数据库且安装成功,占用资源和运行是一切正常的.     我们建站的时候大部分估计还是用MySQL数据库比较多的,毕竟大家已经熟悉这个方式,但是任何产品都不是一层不变的具有优势地位.原来MySQL创始人Widenius在离开公司之后重新创建MariaDB

PHP中date与gmdate的区别及默认时区设置_php技巧

一.date与gmdate有什么区别? PHP时间函数中有两个格式化函数:date()和gmdate(),在官方的文档中的描述为: 复制代码 代码如下: date()   #- 格式化一个本地时间/日期gmdate() #- 格式化一个 GMT/UTC 日期/时间,返回的是格林威治标准时(GMT). 先来举个例子,我们现在所在的时区是+8,那么服务器运行以下脚本返回的时间应该是这样的:当前时间假定是2013-03-14 12:15:27 复制代码 代码如下: echo date('Y-m-d H

SQL数据库与oracle数据库镜像有什么不同对比_数据库其它

Oracle数据库与MSSQL数据操作上有很大的不同,但是,在镜像操作方面有类比的地方.这篇文章关于MSSQL数据库镜像在Oracle数据库中是如何实现的,它们之间存在哪些差异呢. 首先,微软SQL数据库中的镜像数据库类似于Oracle数据库中的备用数据库.我说的只是类似,确切的说,我们需要考虑不同数据库在自己体系中的差异.MSSQL作为一个实例来操作,一个实例包含几个数据库,你首先要登录一个实例,然后选择哪个数据库作用于该实例.而在Oracle数据库中,简单模式(忽略RAC)就只有一个数据库与