当前位置: 首页 > news >正文

sql链接的url中serverTimezone的作用

一. 如何部署mysql 中发现的问题

1. 安装过程中发现启动mysql时候缺少某些so包。但是apt-get安装so包安装不成功

1. 类似采用apt search libaio*,先确认现在的so包的名字。之前mysql 6.5的包需要的so包,现在都是64位了,名字都变了

2. 确认好名字后,类似apt-get install libaio1t64 libaio-dev进行安装

3. find / -name libaio1t64*,查找对应的so包的安装位置

4. 启动其实会依然报错。原因是,例如mysql启动需要的是libaio.so.1。但是安装的是64位的libaio1t64.so.2包。所以依然找不到。所以需要将libaio1t64.so.2改名为libaio.so.1

其他类似的情况这样处理。应该就可以启动起来mysql

二. mysql 如果通过mac的brew安装的,此时如果不知道my.cnf的位置,可以采用mysqld --verbose --help|less ,里面有显示my.cnf 的查找路径.brew 安装的位置一般在/opt/homebrew/opt/下

三. mysql安装成功后,发现无法远程登录。原因是除了bind-address = 0.0.0.0还需要通过mysql命令登录数据库后,设置root的权限。但是这里注意root是要设置密码才能远程连接的,否则还是远程无法连接

四. serverTimezone的作用

本质上serverTimezone就是告知当前的session下,mysql的数据库的临时时区是什么。其实是告知jbdc,在读取的时候,读到的时间所在是时区是serverTimezone这个时区的时间,再结合当前程序所在的本地时区,就可以在getTimestamp的时候,将serverTimezone这个时区的时间转化成本地程序所在时区的时间,返回给jdbc上层程序。也就是说,serverTimezone在写入的时候不起作用,写入什么时间,mysql就记录什么时间,mysql甚至不知道你写的时间是什么时区的,他不关心。其实是在sql读取的时候起作用,读取的时间到底是哪个时区的,完全是serverTimezone决定的。然后getTimestamp左右就是返回当前golang程序所在的机器的本地时间,所以这里会根据serverTimezone和本地时区的差别,getTimestamp进行时区转换,返回转换后的时间。

String connStr = "jdbc:mysql://10.45.21.139:3306?serverTimezone=Asia/Shanghai&useSSL=false";
public class Main {public static void main(String[] args) throws SQLException {// serverTimezone=GMT%2B4 serverTimezone=Asia/Shanghai&System.out.println("Hello world!");String connStr = "jdbc:mysql://10.45.21.139:3306?useSSL=false";String u = "root";String p = "root";Connection conn = DriverManager.getConnection(connStr,u,p);Statement stmt =conn.createStatement();ResultSet rs = stmt.executeQuery("select * from test.tt");while (rs.next()){java.sql.Timestamp name = rs.getTimestamp(1);System.out.println(name.toString());name = rs.getTimestamp(2);System.out.println(name.toString());}
//        stmt.execute("insert into test.tt values ('2022-10-24 15:45:00', '2022-10-24 15:45:00')");}
}

如果写入时候serverTimezone=Asia/Shanghai,而读取的时候用的sql的url连接为

serverTimezone=GMT%2B9.那么用rs.getTimestamp获取到的时间,就是2022-10-24 14:45:00。因为读取时候认为数据库返回的2022-10-24 15:45:00时间是GMT%2B9时区,本地是+8区,因此时间要-1.

如果请求sql的url不写serverTimezone,则会使用数据库的global.time_zone作为数据库时间读取的所在的时区。

可以通过以下一些命令查询

show variables like "%time_zone%";set global time_zone = '+0:00';
flush privileges;set  time_zone = '+8:00';
flush privileges;SELECT @@global.time_zone, @@SESSION.time_zone;

注意,如果通过

//            String a = rs.getString(1);
//            System.out.println(a.toString());
//             a = rs.getString(2);
//            System.out.println(a.toString());

按照string去读取,则不会有时间转换的问题,和写入的时间是一样的

http://www.xdnf.cn/news/1311013.html

相关文章:

  • MQ迁移方案
  • Unity 游戏提升 Android TargetVersion 相关记录
  • 深入了解 swap:作用、局限与分区建立
  • (第十七期)HTML图像标签详解:从入门到精通
  • 解决html-to-image在 ios 上dom里面的图片不显示出来
  • [Linux] Linux交换空间管理 Linux系统启动原理
  • 8.16 pq
  • 从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)
  • 嵌入式硬件篇---运算放大器
  • 要想在Trae运行Java程序,该怎样配置Java环境?
  • TOGAF八步一法笔记2
  • TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别
  • RocketMq面试集合
  • 暴雨服务器:以定制化满足算力需求多样化
  • 小白挑战一周上架元服务——元服务开发06
  • 肖臻《区块链技术与应用》第20-22讲 - 以太坊难度调整、权益证明和智能合约
  • 415. 字符串相加
  • Java设计模式之《工厂模式》
  • 【Java web】HTTP 协议详解
  • HTTP 1.0, 2.0 和 3.0 有什么区别?
  • OpenAI TTS API + Web 前端 AudioContext 实战方案
  • (论文速读)ViDAR:视觉自动驾驶预训练框架
  • leetcode-139. 单词拆分-C
  • 中本聪思想与Web3的困境:从理论到现实的跨越
  • 从依赖到自研:一个客服系统NLP能力的跃迁之路
  • 昇腾AI自学Day2-- 深度学习基础工具与数学
  • Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
  • 异构数据库兼容力测评:KingbaseES 与 MySQL 的语法・功能・性能全场景验证解析
  • linux设备驱动之字符设备驱动
  • Python代码规范与静态检查(ruff/black/mypy + pyproject.toml + Makefile)自动化工具链介绍