1.首先,在创建数据库的时候要指定编码(这个很重要,否则数据库会按默认的编码进行存储,肯定是乱码,除非制定默认编码为utf8或gbk等)。
2.其次,页面编码要设置与数据库统一,同时有必要的话可写一个编码过滤器(或是编码处理类,手动修改编码)
3.最后,就是hibernate的连接数据库语句要指定字符编码,这一步容易被忽略,特别是自动生成的hibernate配置文件。
4.jdbc:mysql://localhost:3306/【数据库名】?useUnicode=true&characterEncoding=utf-8
现只列举几个重要的参数,如下表所示:
参数名称 |
参数说明 |
缺省值 |
最低版本要求 |
user |
数据库用户名(用于连接数据库) |
|
所有版本 |
password |
用户密码(用于连接数据库) |
|
所有版本 |
useUnicode |
是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true |
false |
1.1g |
characterEncoding |
当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk |
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中的&符号需要转义成&。比如在tomcat的server.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