java与jsp对于mysql的操作大致是相同的,在此以jsp为例进行介绍。
JSP页面想mysql插入数据,但中文现出了:“???”这样的乱码,第一反应是直接在mysql 里执行插入中文语句,mysql成功了,没有出现乱码(对于直接插入也是乱码的情况最后也进行介绍)。于是上网找了很多资料: 其实无论是用什么编码:gb2312或者utf-8,都要遵循编码统一的道理。就是说如果你在页面中采用了utf-8,那么你建mysql表时也如此,以下是如处需要统一的地方:
- 在jsp页面的<%@ page 位置加上 contentType=”text/html; charset=utf-8″ %>,<meta 的位置也是如此:content=”text/html;charset=utf-8″ />
- 建立一个mysql数据库,字符集采用utf-8,建表也是如此。
- 在getConnection的URL中加上:?useUnicode=true&characterEncoding=UTF-8″,如:url = “jdbc:mysql://localhost:3306/(此处为数据库名称)?useUnicode=true&characterEncoding=UTF-8″,也就是在(数据库名称)的后面
其中问号不能丢 -
-
-
- 如果你不是在jsp页面里直接处理form,也是和我一样采用servlet来处理form的话,那么在还要增加一个过滤器,这主要是因为采用的是tomcat的web发布器,如果用resin的话,不会有这样的问题,这也是我后面花了很长时间的原因所在。
过虑器 SetCharacterEncodingFilter.java 的代码:
package peom;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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; public class SetCharacterEncodingFilt
er implements Filter {
class Request extends HttpServletRequestWrappe r
{
public Request(HttpServletRequest request) {
super(request);
} public String toChi(String input) {
try {
byte[] bytes = input.getBytes(”ISO8859-1″);
return new String(bytes, “utf-8″);
} catch (Exception ex) {
}
return null;
} private HttpServletRequest getHttpServletRequest()
{
return (HttpServletRequest) super.getRequest();
} public String getParameter(String name)
{
return
toChi(getHttpServletRequest().getParameter(name));
}
public String[] getParameterValues(String name)
{
String values[] =getHttpServletRequest().getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
values[i] = toChi(values[i]);
}
}
return values;
}
} public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse
response,FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpreq = (HttpServletRequest) request; if (httpreq.getMethod().equals(”POST”)) { request.setCharacterEncoding(”utf-8″); } else {
request = new Request(httpreq);
} chain.doFilter(request, response);
} public void init(FilterConfig filterConfig) throws
ServletException {
}
}然后在WEB-INF目录下的web.xml文件,配置下过虑器,
<filter>
<filter-name>SetCharacterEncodingFilt er</filter-name>
<filter-class>peom.SetCharacterEncodingFilt er</filter-class>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilt er</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 这里要注意的是:路径、代码尽量放在前面,最好是<web-app 的后面
`id` int(100) NOT NULL AUTO_INCREMENT,
`usernumber` int(30) DEFAULT NULL,
`famenid` int(30) DEFAULT NULL,
`flowerid` int(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk