jdbc连接mysql 8 的一些坑

1、驱动包要升级为 mysql-connector-java-8.0.11.jar

 

2、JDBC driver 由“com.mysql.jdbc.Driver”改为“com.mysql.cj.jdbc.Driver”

 

3、url中加上“userSSL=false”。否则会出现以下错误:

“Establishing SSL connection withoutserver's identity verification is not recommended. According to MySQL 5.5.45+,5.6.26+ and 5.7.6+ requirements SSL connection must be established by defaultif explicit option isn't set. For compliance with existing applications notusing SSL the verifyServerCertificate property is set to 'false'. You needeither to explicitly disable SSL by setting useSSL=false, or set useSSL=trueand provide truststore for server certificate verification.”

 

4、url中加上“serverTimezone=GMT%2B8”(GMT%2B8代表东八区)

       或者直接修改数据库的默认时区:

show variables like '%time_zone%';
set global time_zone='+8:00';

最后附示例URL:

jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8

<think>嗯,用户这次的问题很明确:需要MySQL5.1.22-rc-community版本的JDBC连接配置方法和常见问题。虽然引用了字符集相关的旧资料,但用户特意说明这不是真实需求,而是想延续上次的连接问题讨论。注意到用户引用字符集的内容其实和JDBC连接无关,可能只是历史记录残留。真正的焦点在于:1)如何配置JDBC连接字符串2)适配该老版本的特殊问题。这个版本发布于2008年,确实比较古老,需要特别注意驱动兼容性。用户应该是个开发人员,可能在维护遗留系统。ta提到JDBC说明是Java环境,但没提具体框架(比如Spring),所以给出基础配置更稳妥。考虑到版本老旧,需要重点提醒两点:一是必须用Connector/J5.1驱动(新版驱动不兼容),二是SSL等现代协议支持可能受限。上次回答已提供字符集方案,这次要完全转向JDBC主题。特别需要警告Class.forName()过时的问题——很多老教程还在用这个方法,但Java早就废弃了。同时准备强调connector的Maven坐标,方便用户直接使用。常见问题部分要侧重老版本特有的:时区陷阱(5.1默认不会自动转换时区)、批量更新的限制、ResultSet遍历的注意事项。最后主动提出SSL配置和连接池优化的延伸方向,因为这两个点对老旧系统尤为重要。</think> 以下是MySQL 5.1.22-rc-community版本通过JDBC连接的配置方法及常见问题解决方案: ### 一、基础配置步骤 1. **驱动选择** 需使用对应版本的Connector/J驱动: ```xml <!-- Maven依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.22</version> <!-- 严格匹配数据库版本 --> </dependency> ``` 2. **连接字符串配置** 标准格式: ```java String url = "jdbc:mysql://host:port/dbname?characterEncoding=UTF-8&useSSL=false"; ``` 3. **关键参数说明** | 参数 | 必须性 | 示例值 | 说明 | |----------------------|--------|---------------------|--------------------------| | `characterEncoding` | 必需 | UTF-8/gbk | 避免Java与MySQL编码不一致导致乱码[^1] | | `useSSL` | 推荐 | false | 5.1版本默认无SSL,启用易失败 | | `autoReconnect` | 建议 | true | 网络中断后自动重连 | ### 二、连接代码示例 ```java Class.forName("com.mysql.jdbc.Driver"); // 注意:Java 9+ 需替换为DataSource try (Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=false", "username", "password")) { // 执行SQL操作 } ``` ### 三、常见问题及解决 1. **乱码问题** * **现象**:中文字符显示为`???` * **解决**: - JDBC连接串中添加`characterEncoding=utf8` - 执行SQL前设置字符集: ```sql SET NAMES 'utf8' -- 等价于设置客户端/结果集/连接字符集[^1] ``` 2. **时区异常** * **报错**:`The server time zone value 'xxx' is unrecognized` * **解决**:连接串追加参数 ``` &serverTimezone=Asia/Shanghai // 中国时区 ``` 3. **驱动不兼容** * **报错**:`No suitable driver found` * **解决**: - 检查驱动版本是否≥5.1.22 - 确认JAR包在项目classpath中 4. **SSL握手失败** * **报错**:`SSLHandshakeException` * **方案**: ```java // 连接串显式关闭SSL jdbc:mysql://host/db?useSSL=false ``` ### 四、高级配置建议 1. **连接池参数优化**(如HikariCP) ```properties minimumIdle=5 maximumPoolSize=50 connectionTimeout=30000 ``` 2. **断线重连机制** 添加参数: ``` autoReconnect=true&failOverReadOnly=false ``` ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值