jdbc 连接mysql异常及插入中文出现乱码

1、调用getConnection()连接数据库就会报出异常

 DriverManager.getConnection(SQL_URL, SQL_USERNAME, SQL_PASSWORD);

通过控制台打印看到,每次调用这个函数就会发生异常。

jdbc 连接mysql异常及插入中文出现乱码_第1张图片

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

网上查了一下,说是安装mysql 设置的时区不正确导致,重新设置mysql 的时区,如下

mysql> set global time_zone='+8:00';

这样貌似问题可以解决了,但是数据库如果重启了之后,又会出现一样的错误。可以通过另外一种方式来解决这个错误,在连接数据库的url中设置时区

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test;

 改成

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test?serverTimezone=GMT%2B8"; 

这样也可以解决时区不对的问题。

 

2、往mysql数据库中插入中文出现乱码

mysql 数据库是安装在window 上,jee开发环境也是在window,文件的编码也设置成了utf-8格式。但是发现从页面提交过来的中文字符,插入数据库后出现了???这样的乱码。

于是把数据和里面表格的编码设置成utf-8 

mysql> alter database db_test character set utf-8;

设置表格编码 alter table table_name character set utf-8;

修改之后,插入中文也不会再是乱码了,导出war包放到ubutun的服务器进行部署,运行起来后,从页面提交的中文字符还是出现乱码,在window 上没有问题,到ubutun上就出现乱码,是两个系统的字符编码不一样导致的吗?

把ubutun 上mysql 里面的数据库和表格的编码都指定成utf-8 ,其实在一开始就这样设置了,查看也是utf-8编码,在命令窗口中直接插入中文,再查询出来中文也是可以正常显示。我们吧网页到数据库的流程梳理一下

浏览器(网页)->后台(tomcat)->数据库(mysql)

另外一个流程:数据库(mysql)->后台(tomcat)->浏览器(网页)

能够正常显示中文,但是从页面提交上来的中文到数据库里面就是乱码,现在最好的版本就是在后台打印一下收到的中文是不是已经出现乱码了,同时也做了下面的修改

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test?serverTimezone=GMT%2B8"; 

改成

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8";

也是修改数据库连接的url,指定字符编码,修改了之后,中文乱码的问题也解决了,后台打印看到接收到的中文也是正常的,所以应该是提交到数据库时,数据库没有按照utf-8格式来接收才导致的中文乱码。

 

你可能感兴趣的:(mysql)