• mysql中datetime和timestamp的区别
  • MySQL中有关TIMESTAMP和DATETIME的总结
  • 对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。
  • timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’
  • By default, the first TIMESTAMP column has both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP if neither is specified explicitly。很多时候,这并不是我们想要的,如何禁用呢?
    • 将“explicit_defaults_for_timestamp”的值设置为ON。
    • “explicit_defaults_for_timestamp”的值依旧是OFF,也有两种方法可以禁用
      • 1> 用DEFAULT子句该该列指定一个默认值
      • 2> 为该列指定NULL属性。
  • mysql数据库不管是迁库,还是集群,都一定要保证时区的相同。如果mysql集群中的数据库时区不一致,timestamp的字段将会造成数据不一致的情况发生。
    1. mysql> show variables like '%time_zone%';
    2. +------------------+--------+
    3. | Variable_name | Value |
    4. +------------------+--------+
    5. | system_time_zone | CST |
    6. | time_zone | SYSTEM |
    7. +------------------+--------+
    CST指的是MySQL所在主机的系统时间,是中国标准时间的缩写,China Standard Time UT+8:00。系统默认时区为CST,而当前时区是system,也就是当前时区为系统默认时区,也就是当前时区为CST。

    修改mysql的时区

    ```bash set global time_zone = ‘+8:00’; ##修改mysql全局时区为北京时间,即我们所在的东8区 set time_zone = ‘+8:00’; ##修改当前会话时区 flush privileges; #立即生效

操作系统查看时区

date -R

  1. ```
  2. ##在[mysqld]区域中加上
  3. default-time_zone = '+8:00'
  4. ## 重启mysql
  5. systemctl restart mysql

连接mysql客户端的时区

Java时间