查看:
复制代码代码如下:
mysql>SHOW VARIABLES LIKE '%time_zone%'
+------------------+--------+
| Variable_name| Value |
+------------------+--------+
| system_time_zone | CST|
| time_zone| SYSTEM |
+------------------+--------+
2 rows IN SET (0.00 sec)
可以通过修改my.cnf, 在 [mysqld] 之下加来修改时区。
default-time-zone=timezone
例如:
default-time-zone='+8:00'
修改后记得重启msyql。
注意一定要在 [mysqld] 之下加 ,否则会出现错误: unknown variable ‘default-time-zone=+8:00′
另外也可以通过命令:
SET time_zone=timezone
例如:比如北京时间(GMT+0800)
SET time_zone='+8:00'
这个和php的时区设置又有点差别,比如北京时间在php中是:
date_default_timezone_set('Etc/GMT-8')
美国pst时间(GMT-08:00)
SET time_zone = '-8:00'
复制代码代码如下:
mysql>SET time_zone = '+8:00'
Query OK, 0 rows affected (0.00 sec)
mysql>SELECT now()
+---------------------+
| now() |
+---------------------+
| 2008-12-29 11:26:36 |
+---------------------+
1 row IN SET (0.00 sec)
mysql>SET time_zone = '-8:00'
Query OK, 0 rows affected (0.00 sec)
mysql>SELECT now()
+---------------------+
| now() |
+---------------------+
| 2008-12-28 19:27:09 |
+---------------------+
1 row IN SET (0.00 sec)
储存时间,常用的有三个选择datetime、timestamp、int。昨夜同事问到了,于是今天就总结一下自己的理解。插入效率:datetime>
timestamp
>
int读取效率:int
>
timestamp
>
datetime储存空间:datetime
>
timestamp
=
int具体上面的实验数据可以看这篇文章。
建立索引的体积,和索引的速度,你懂的。
让我们来看一个应用场景:
看下这张图,第一我们需要设置系统的默认时区,第二我们也需要提供不同时区时间显示的需要。于是,我们分别使用datetime、timestamp、int字段类型来看下:使用datetime直接显示时间,这是个不错的选择,但是如果考虑到时区,很明显计算上的麻烦。使用timestampOK,这个很好,可以根据系统的时区来自动输出时间,但是单个用户要定制自己的时区呢?再者你不怕麻烦,在程序里面实现了这个计算,服务器若是换个地方,改了下时区,你程序里面计算单个用户当地时间的代码怎么办(timestamp出来的时间会根据时区的变化而变化,在某些情况下是不错的选择,但在某些情况下,真的很鸡肋)。使用int从上面两个类型的缺点看来,貌似这个类型可以解决以上的问题,其实我们只要存格林时间的unix
timestamp就好了,时区时间的计算上也很方便,读取的效率也不错。我觉得用这个储存的缺点呢,就是直接select的时候时间不能直观的显示出来。看看其他开源程序是怎么做的discuz,
typecho,
emlog等等等等,他们都选用int了,这一定有他们的道理,我想也没什么可以多说的了。
首先,mysql中是没有select current_time这么一说的(select是用来查询有结果返回的表达式),select要么调用函数如select current_time(),或者说从数据表查询数据 select current_time from table。其次,要注意mysql中对应的时间日期格式类型,也就是UPDATE_DATE的字段类型,具体如下:
① 时间日期类型datetime/mysql时间戳timestamp(Ymdhis:20181212121212,对应显示2018-12-12 12:12:12),那么结果应该是:UPDATE T_SYUTYOU SET UPDATE_DATE = now(),因为now()保存的结果是一个datetime类型
② 时间型time(his:121212,对应显示12:12:12),那么结果应该是:UPDATE T_SYUTYOU SET UPDATE_DATE = curtime()/current_time(),因为curtime()和current_time()一样保存的结果是一个time类型
③ 真正时间戳int unsigned(格林位置时间到目前位置的秒数:1545891091),那么结果应该是:UPDATE T_SYUTYOU SET UPDATE_DATE = unix_timestamp(),因为unix_timestamp()保存的结果是一个真正意义的时间戳
想要了解更多的一些关于MySQL的 *** 作,可以去看看黑马程序员的6天玩转MySQL
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)