hibernate连接mysql时的乱码问题

1.首先,在创建数据库的时候要指定编码(这个很重要,否则数据库会按默认的编码进行存储,肯定是乱码,除非制定默认编码为utf8gbk等)。

2.其次,页面编码要设置与数据库统一,同时有必要的话可写一个编码过滤器(或是编码处理类,手动修改编码)

3.最后,就是hibernate的连接数据库语句要指定字符编码,这一步容易被忽略,特别是自动生成的hibernate配置文件。

4.jdbc:mysql://localhost:3306/【数据库名】?useUnicode=true&characterEncoding=utf-8

现只列举几个重要的参数,如下表所示:

参数名称

参数说明

缺省值

最低版本要求

user

数据库用户名(用于连接数据库)

 

所有版本

password

用户密码(用于连接数据库)

 

所有版本

useUnicode

是否使用Unicode字符集,如果参数characterEncoding设置为gb2312gbk,本参数值必须设置为true

false

1.1g

characterEncoding

useUnicode设置为true时,指定字符编码。比如可设置为gb2312gbk

false

1.1g

autoReconnect

当数据库连接异常中断时,是否自动重新连接?

false

1.1

autoReconnectForPools

是否使用针对数据库连接池的重连策略

false

3.1.3

failOverReadOnly

自动重连成功后,连接是否设置为只读?

true

3.0.12

maxReconnects

autoReconnect设置为true时,重试连接的次数

3

1.1

initialTimeout

autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒

2

1.1

connectTimeout

和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本

0

3.0.1

socketTimeout

socket操作(读写)超时,单位:毫秒。 0表示永不超时

0

3.0.1

对应中文环境,通常mysql连接URL可以设置为:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

在使用数据库连接池的情况下,最好设置如下两个参数:

autoReconnect=true&failOverReadOnly=false

需要注意的是,在xml配置文件中,url中的&符号需要转义成&。比如在tomcatserver.xml中配置数据库连接池时,mysql jdbc url样例如下:

例一:jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk

&autoReconnect=true&failOverReadOnly=false

jdbc:mysql://192.168.15.161:9736/learn?autoReconnect=true&useUnicode=true&characterEncoding=utf8&mysqlEncoding=utf8

其他参数请参见 mysql jdbc 官方文档: MySQL Connector/J Documentation

你可能感兴趣的:(hibernate连接mysql时的乱码问题)