5 MySQL驱动类选择与数据库连接 URL 时区配置

目录

[5 MySQL驱动类选择与数据库连接 URL 时区配置](#5 MySQL驱动类选择与数据库连接 URL 时区配置)

[5.1 MySQL 驱动类(driver-class-name)选择](#5.1 MySQL 驱动类(driver-class-name)选择)

[5.2 数据库连接 URL 时区配置](#5.2 数据库连接 URL 时区配置)

[5.3 字符编码配置](#5.3 字符编码配置)

[5.4 总结](#5.4 总结)


5 MySQL驱动类选择与数据库连接 URL 时区配置

正确且规范的示例:application.yml(SpringBoot2.7.6,MySQL80)

复制代码
spring:
  # 配置数据源信息
  datasource:
    # 配置数据源类型
    type: com.zaxxer.hikari.HikariDataSource
    # 配置连接数据库信息
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: '036520'

5.1 MySQL 驱动类(driver-class-name)选择

  1. Spring Boot 版本与驱动类对应关系
  • Spring Boot 2.0 及以下(内置 MySQL 5.x 驱动):
    驱动类使用com.mysql.jdbc.Driver,也就是application.yml里的driver-class-name写的是com.mysql.jdbc.Driver。
  • Spring Boot 2.1 及以上(内置 MySQL 8.x 驱动):
    驱动类使用com.mysql.cj.jdbc.Driver,也就是application.yml里的driver-class-name写的是com.mysql.cj.jdbc.Driver。
  • 若不匹配,运行时会出现 WARN 警告信息。

    翻译:"正在加载类com.mysql.jdbc.Driver,这已被弃用。新的驱动类是com.mysql.cj.jdbc.Driver。驱动会通过 SPI(服务提供程序接口)自动注册,通常不需要手动加载驱动类。"
    虽然警告,但是不影响代码的运行。
    警告原因:你当前用的是com.mysql.jdbc.Driver(旧驱动类),但项目里实际依赖的是 MySQL 8.x 驱动 jar 包(对应新驱动类com.mysql.cj.jdbc.Driver),旧类已被 8.x 驱动标记为 "过时(deprecated)",所以触发警告。
    测试成功原因:8.x 驱动为了兼容旧代码,保留了com.mysql.jdbc.Driver类的 "占位实现"------ 它会自动转发到新驱动类com.mysql.cj.jdbc.Driver执行逻辑。因此虽然报了警告,但实际驱动功能仍能正常工作。
  • 总结:是否带cj取决于 MySQL 驱动 jar 包版本
    • 5.x 驱动 jar 包 → com.mysql.jdbc.Driver
  • 8.x 驱动 jar 包 → com.mysql.cj.jdbc.Driver
  1. com.mysql:mysql-connector-j(或旧坐标mysql:mysql-connector-java)的版本 ,它决定了驱动是 5.x 还是 8.x。

    mysql mysql-connector-java runtime

注:不需要声明版本号,SpringBoot会自动导入。spring-boot-starter-parent(比如 2.7.6),它会管理第三方依赖的默认版本(包括 MySQL 驱动)。

mysql-connector-j(或mysql-connector-java)的版本号:

  • 版本号以5.开头(比如5.1.49)→ 是 5.x 驱动,对应驱动类com.mysql.jdbc.Driver;
  • 版本号以8.开头(比如8.0.31)→ 是 8.x 驱动,对应驱动类com.mysql.cj.jdbc.Driver。
  1. 驱动和MySQL的兼容性
    SpringBoot 2.0(内置 5.x 驱动)连接 MySQL 8.0,大部分场景可以运行,但有兼容性风险,因为 5.x 驱动是为 MySQL 5.x 设计的,对 MySQL 8.0 的新特性(比如密码加密方式)支持不足:
  • 可能遇到的问题:
  • 比如 MySQL 8.0 默认密码加密方式是caching_sha2_password,而 5.x 驱动不支持,会报 "Authentication plugin 'caching_sha2_password' cannot be loaded" 错误。
  • 解决办法(不推荐):
  • 把 MySQL 8.0 的密码加密方式改成旧的mysql_native_password,但这会降低安全性。
    总的来说:
  • ✅ 同大版本:5.x 驱动 → MySQL 5.x(完美适配);8.x 驱动 → MySQL 8.x(完美适配)
  • ✅ 高版本驱动→低版本数据库:8.x 驱动 → MySQL 5.x(向下兼容,无问题)
  • ⚠️ 低版本驱动→高版本数据库:5.x 驱动 → MySQL 8.x(有兼容性风险,不推荐)

5.2 数据库连接 URL 时区配置

  1. MySQL 版本与 URL 时区要求
  • MySQL 5.7 版本 URL:无需指定时区
    jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8&useSSL=false
  • MySQL 8.0 版本 URL:必须指定时区(否则报The server time zone value'XXX' is unrecognized错误)
    jdbc:mysql://localhost:3306/数据库名?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
    (GMT%2B8即东八区,也可写Asia/Shanghai)
  1. 特殊情况说明
  • 若使用 MySQL 8.0 驱动(8.x jar 包)+ MySQL 8.0 服务器,且服务器 / 系统时区为东八区,驱动会自动适配时区,URL 不加时区也可能不报错,但规范开发仍建议显式指定。
  • 项目(比如SSM、SpringBoot )若用 5.x 驱动连接 MySQL 8.0,必须手动加时区,不然会报错。

5.3 字符编码配置

无论 MySQL 5.7 还是 8.0,URL 中建议添加字符编码参数保证中文兼容:

  • characterEncoding=utf-8 或 useUnicode=true&characterEncoding=utf-8
  • MySQL 8.0 默认字符集为utf8mb4,8.x 驱动已默认适配,但显式指定可避免环境差异导致的乱码。

5.4 总结

  1. 驱动 jar 包版本决定驱动类(是否带cj)和时区自动适配能力:
  • 5.x 驱动:无自动时区适配,MySQL 8.0 必须手动加时区,驱动类用com.mysql.jdbc.Driver
  • 8.x 驱动:可自动读取服务器 / 系统时区,驱动类用com.mysql.cj.jdbc.Driver
  1. MySQL 服务器版本决定 URL 时区配置的 "硬性要求":
  • MySQL 5.7:无需时区参数
  • MySQL 8.0:规范配置需加时区参数(避免跨环境报错)
相关推荐
疯狂打码的少年5 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
普马萨特6 小时前
实体与位置关系的数据从哪里来:获取、治理与仍待解决的问题
网络·数据库
醉颜凉7 小时前
KingbaseES日期格式化:MySQL date_format函数的迁移指南
mysql·date_format·kingbasees·数据库兼容·函数迁移
醉颜凉7 小时前
MySQL 8 忘记 root 密码?这两种方法帮你轻松解决
数据库·mysql·adb
刃神太酷啦7 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
RestCloud7 小时前
集成链路监控体系搭建:接口调用、数据流转与异常告警全覆盖
数据库·数据安全·ipaas·api管理·数据监控·集成平台·api 治理
xxwl5858 小时前
MySQL 基础学习笔记
数据库·mysql
SKH.8 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
Rain的Java大神之路8 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发
闻哥8 小时前
小表驱动大表——SQL查询优化的核心原则(深度剖析+流程图)
数据库·sql·流程图