调整PHP和MySQL的时区,实现同步显示中国时间

作者:寒川 发布于:2010-10-27 16:38 Wednesday 分类:网页编程

现在很多朋友购买国外主机,可是国外主机显示的是当地时间,如何设置成国内时间呢?

所谓的时间问题归根结底也就是“时区”问题,我们首先要知道的是:

1、美国时间和中国时间相差应该是8小时。
2、PHP的时间和MySQL的时间不是相同的。

所以,我们所要做的事情就是:

1、把美国时间改成中国时间。
2、并且要把PHP的时间和MySQL的时间统一。


一、修改PHP时间

听上去有点小复杂,其实很简单。首先我们来改PHP的时间,将这句代码插入到PHP程序中,公共调用页的顶部(也就是要include_once,require_once到的脚本里,当然你不用_once我也没有意见),确保需要用到时间的页面都必须调用到:复制内容到剪贴板代码:

date_default_timezone_set('PRC') or die('时区设置失败,请联系管理员!');现在测试下:复制内容到剪贴板代码:

echo date('Y-m-d H:i:s');怎么样?哇哈哈,正确显示中国时间了,当然你要说北京时间我也没意见。至于那个参数PRC是什么意思,我记得是某个神奇的土地之缩写,不用管它,照搬就行了,错不了的。成功了?NO,不要得意得太早,在MySQL里输入语句SELECT NOW();你会惊愕的发现,MySQL的时间还是美国时间。不急,我们继续下一步。



二、修改MySQL时间

如果你在写程序的时候,习惯了用类或者函数,那么恭喜你,这一步你同样只需要一次复制粘贴操作就能将它解决。如果你在写程序的从来不用类或者函数,那么我会祈祷耶稣和释迦牟尼一同保佑你,不会在改程序的时候累得很惨,同时希望你改掉这个不好的编程习惯。那么,就请在PHP程序有数据库连接的下一语句(只有1次,就加1句;若有无数次,就加无数次……这个编程习惯,还是重要啊)加入如下代码:复制内容到剪贴板代码:

mysql_query("SET time_zone = '+8:00'") or die('时区设置失败,请联系管理员!');再去SELECT NOW();下,你会惊喜地发现,MySQL也是中国时间了。为什么是+8:00呢?前面我说过了,中国时间和美国时间差8小时,往那个那个貌似向东还是向西的方向来着?(不好意思我是路盲,我在怪地球是圆的)。OK,现在MySQL的时间也搞定了,我相信现在就会有比较严谨朋友问了:那你如何证明PHP的时间和MySQL的时间是同步呢?啊……这个人与人之间的信任,还是重要的,就像汇款,哈哈,那我们来做个测试吧:复制内容到剪贴板代码:

//这里是页面的开头,用于改PHP时间的代码。
date_default_timezone_set('PRC') or die('时区设置失败,请联系管理员!');

//-------------------------------------------------------------
//
// 这里写数据库连接的代码,别懒,自己写。
//
//-------------------------------------------------------------

//数据库一旦连接,紧跟着就是改MySQL时间的代码。
mysql_query("SET time_zone = '+8:00'") or die('时区设置失败,请联系管理员!');

//显示PHP的时间
echo date('Y-m-d H:i:s');

echo


//显示MySQL的时间
$mysql_time = mysql_query("SELECT NOW()");
$mysql_rows = mysql_fetch_row($mysql_time);

echo $mysql_rows[0];

来自百度

标签: php 脚本 编程 mysql

评论(14) 引用(0) 浏览(2890)

sql随机排序

作者:寒川 发布于:2010-3-9 22:18 Tuesday 分类:网页编程

    今天接一小任务,要求随机排序显示数据库中的图片,在SQL Server随机排序(随机取N条记录)只需要简单地加个“Order By Rnd()"或”Order By NewID()"就搞定了,但是在access中貌似却很不好用,access中用以上排出来的结果每次都是一样的,百度,google了很久也没有找到比较方便快捷的办法,大多数都是建议用SQL语句查询出全部记录,然后再在进行随机排序,但是要求一条sql语句啊。

    发现用“Select * From table Order By Rnd(ID)"可以实现对记录集的随机排序(其中ID是table这个表的主键“下同”--不必非是主键,只要是数字类型的字段就可以了)。但奇怪的是在ACCESS中明明可以随机排序的,在ASP中用同样的语句进行查询却还是每次查询出的记录集顺序相同,郁闷!!要想实现随机排序还真有点难,最后又百度、google了半天,弄到这么一条sql查询语句,“SELECT  * FROM table ORDER BY Rnd(ID-timer())”在ASP跟ACCESS中查询得到的记录集貌似是随机排序的了。
 

标签: php asp mysql access

评论(0) 引用(0) 浏览(1836)

mysql命令导入导出.sql文件

作者:寒川 发布于:2010-2-5 6:23 Friday 分类:计算机

phpmyadmin是个不错的东西,能方便地建立、删除数据库数据表,导入导出也十分方便,但是遇到较大的.sql文件的时候就有点了。为此,学习点mysql基本命令还是很有必要的。

    1、mysql导入命令:
    先登录mysql数据库控制台:
    mysql -u root -h 127.0.0.1  -p
    使用数据库:
    mysql>use 数据库;
 然后使用source命令,导入数据库:
 mysql>source c:\test.sql;

       2、mysql导出命令:
    导出整个数据库: mysqldump -u 用户名 -p 数据库名 > 导出的文件名
     .导出一个表: mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
     导出一个数据库结构:mysqldump -u atyu -p -d --add-drop-table bbs >c:\test.sql

标签: mysql 服务器 数据库 apache

评论(0) 引用(0) 浏览(1433)

phpmyadmin批量删除msql指定前缀表名的数据表

作者:寒川 发布于:2009-9-22 14:40 Tuesday

先用查询语句,得到删除需要制定前缀的表的名字,查询语句如下("test_"为表前缀):
SELECT concat( 'drop table ', table_name, ';' ) FROM information_schema.tables WHERE table_name LIKE 'test_%';
将查询结果复制下来,在输入sql查询框中就可以删除指定前缀的表了。

标签: 编程 mysql

评论(0) 引用(0) 浏览(2050)

删除MySQL数据库中二进制日志的3种方法

作者:寒川 发布于:2009-7-29 1:39 Wednesday

    因设置原因,Mysql数据库用久了就在data目录下生成一些文件,感觉很碍眼,网上查了一下,是些二进制查询日志,可以删除的。但最好别直接删除,怕删掉有用的东西。现在介绍3中安全删除MySQL数据库中二进制日志的方法。
1.sql命令:RESET MASTER
可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个新的二进制日志文件
2.sql命令:PURGE MASTER LOGS
语法
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。
例如:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';
BEFORE变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。MASTER和BINARY是同义词。
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
要清理日志,需按照以下步骤:
1.
在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
2.
使用SHOW MASTER LOGS获得主服务器上的一系列日志。
3.
在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的,这是清单上的最后一个日志。
4.
制作您将要删除的所有日志的备份。(这个步骤是自选的,但是建议采用。)
5.
清理所有的日志,但是不包括目标日志。
3. expire_logs_days参数二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除expire_logs_days numeric GLOBAL
在my.cnf配置文件【mysqld】段中加入,重启MySQL服务,例:
expire_logs_days=3
删除3天以前的日志
注:当然需要考虑有slave情况下的影响
 

标签: mysql

评论(0) 引用(0) 浏览(1709)

Powered by emlog 沪ICP备09072012号