您的位置:首页 > 编程语言 > Java开发

struts2项目插入中文到mysql数据库乱码的解决方法

2016-04-17 13:12 423 查看
项目又出了一些小问题,在更新/插入中文数据到mysql数据库时会显示问号。

我做了如下工作解决了问题:

1. 检查页面编码

将所有的jsp页面编码方式、字符集更改为

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page pageEncoding="UTF-8"%>


2. 更改数据库字符集/编码方式

将mysql配置文件my.ini相关内容改为

[mysql]
default-character-set=utf8


character-set-server=utf8


在mysql命令行运行以下代码(是否有必要存疑)

set character_set_database=utf8;
set character_set_server=utf8;
set character_set_client=utf-8;
set character_set_connection=utf-8;


在mysql命令行运行
SHOW VARIABLES LIKE 'character_set_%';
查看字符集

运行结果应为:

+--------------------------+---------------------------------------------------------------+
| Variable_name            | Value                                                         |
+--------------------------+---------------------------------------------------------------+
| character_set_client     | utf8                                                          |
| character_set_connection | utf8                                                          |
| character_set_database   | utf8                                                          |
| character_set_filesystem | binary                                                        |
| character_set_results    | utf8                                                          |
| character_set_server     | utf8                                                          |
| character_set_system     | utf8                                                          |
| character_sets_dir       | C:\Program Files (x86)\MySQL\MySQL Server 5.5\share\charsets\ |
+--------------------------+---------------------------------------------------------------+


已经存在的数据库编码方式的修改

导出数据库结构及内容到sql文件

用文本编辑器打开sql文件

修改相关的编码方式,如把latin1修改为utf8

保存并重新导入sql文件到数据库

3. 中文参数传输编码设置

1. 更改tomcat服务器编码

修改Tomcat—->conf—–>server.xml文件,在修改端口的标签后面加一行代码,如下:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"  URIEncoding="UTF-8"/>


2. 添加struts2 过滤器

建立名为EncodeFilter过滤器类(类名可更改),代码如下:

package dhu.yunfeng.filter;

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;

public class EncodeFilter implements Filter {

public void destroy() {
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}

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


在web.xml添加过滤器。

注意:修改类名为自己命名的类,
<filter-mapping></filter-mapping>
要在已存在过滤器之前


代码如下:

<filter>
<filter-name>encoding</filter-name>
<filter-class>dhu.yunfeng.filter.EncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


4. 修改国际化资源编码所使用的字符集

打开struts.xml,添加或修改相关
<constant />
内容

<!-- 指定国际化编码所使用的字符集 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>


重启tomcat服务器,问题解决。

参考文章:

/article/4497030.html

http://www.2cto.com/database/201410/341144.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: