您的当前位置:首页正文

MySql url参数以及Java访问中文乱码问题解决

来源:画鸵萌宠网
MySql url参数以及Java访问中文乱码问题

2007-11-20 09:37:06| 分类: 数据库技术 |字号 订阅 MySql url参数来源于以下地址:

http://hi.baidu.com/jt88/blog/item/676ab1a13118608947106412.html mysql JDBC Driver

常用的有两个,一个是gjt.Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysql.Driver 详情请参见网站:http://www.gjt.org/ 或在本网站下载mysql JDBC Driver(mm.jar)

另一个是mysql官方提供的JDBC Driver,其JAVA类名为:com.mysql.jdbc.Driver

驱动下载网址:http://dev.mysql.com/downloads/,进入其中的MySQL Connector/J区域下载。

mysql JDBC URL格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...

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

password useUnicode

参数说明

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

是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk

缺省值 false false false false

最低版本要求 所有版本 所有版本 1.1g

characterEncoding autoReconnect autoReconnectForPools

1.1g

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

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

failOverReadOnly

maxReconnects

initialTimeout

connectTimeout

socketTimeout

自动重连成功后,连接是否设置为只读? autoReconnect设置为true时,重试连接的次数 autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒

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

tr

3.0.12 ue 3 2 0 0

1.1 1.1 3.0.1 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

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

对于乱码问题,现解决如下(本人配置过程记录): 1、建数据库时,选择数据库的字符集为GBK; 2、数据库建表时,在建表语句后面加上字符集,如: CREATE TABLE `t_channel` (

`channelid` int(11) NOT NULL auto_increment, `channelname` varchar(100) default NULL, `channel` varchar(20) NOT NULL, `status` smallint(6) NOT NULL default '1', `creator` int(11) default NULL,

`createtime` datetime default NULL, PRIMARY KEY (`channelid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk; 3、连接数据库的JDBC URL中指定字符集

jdbc:mysql://localhost:3306/smsdb?useUnicode=true&characterEncoding=GBK

4、JSP页面中设置字符集为GBK

5、在应用中加载过滤器,对字符集进行转换 在web.xml中增加:

SetCharacterEncoding

common.SetCharacterEncodingFilter

SetCharacterEncoding /*

SetCharacterEncodingFilter类的代码如下: package common; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /**

* Example filter that sets the character encoding to be used in parsing the * incoming request */

public class SetCharacterEncodingFilter implements Filter { /**

* Take this filter out of service. */

public void destroy() { } /**

* Select and set (if specified) the character encoding to be used to * interpret request parameters for this request. */

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(\"GBK\"); // 传递控制到下一个过滤器 chain.doFilter(request, response); }

public void init(FilterConfig filterConfig) throws ServletException { } }

使用以上方法处理后,保存和读取的中文将不会出现乱码。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top