JDBC 连接 MySQL 问题解析

最近配置 JDBC 连接 MySQL 过程中,出现了一系列问题。好在最后都解决了。这里将问题进行汇总,希望能够帮助有同样问题的人度过难关。

1. 报错:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

遇到这个问题,多半是 POM.xml 文件的 mysql-connector-java 版本存在问题。我一开始使用 5.1.44 版本,后来发现始终报这个错误。退回 5.1.6 就可以解决这个问题。

当然,还有一种情况会报这个错误:MySQL Server 连接时间超过8小时,也会自动断开连接,并报错。解决方法一般是修改配置文件。

2. 报错:Unknown initial character set index '255' received from server.Initial client character

遇到这个问题,一般是 MySQL 中出现中文,导致无法正常解析造成的。解决方法是,url 后面加入采用 utf8 编码的要求,从而避免报错。例如,源语句为下列:

<property name="url" value="jdbc:mysql://10.201.0.27:3307/mybatis"/>

可以修改为下列语句:

<property name="url" value="jdbc:mysql://10.201.0.27:3307/mybatis?useUnicode=true&characterEncoding=utf8"/>

3. 报错:对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾

遇到这个问题,我还挺惊讶的,居然是中文报错。后来发现,一般都是 MySQL 中含有中文,在后面加入 characterEncoding=utf8 的时候出现的问题,所以可能是因为这个原因采用中文报错。

解决方法是,内容中&需要用&来代替。例如,下面的语句:

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&characterEncoding=utf8" />

上述语句会报错。需要修改成下列语句,就不会报错:

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&characterEncoding=utf8" />

4. 报错:Unknown system variable 'tx_isolation'

这个问题是 mysql-connector-java 版本过低造成的。可以去查看服务器对应的 mysql 版本,比如服务器 mysql 版本是 8.0.22 的,就将 mysql-connector-java 版本也设置成 8.0.22,并将 driverClass 的 "com.mysql.jdbc.Driver" 调整为 "com.mysql.cj.jdbc.Driver" 即可正常使用。

5. 参考内容

  1. JDBC 连接 MySQL

  2. 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾