JSP,MySQL和UTF-8(JSP, MySQL and UTF-8)

2019-09-19 10:34发布

我要去,我通过表单中输入不被存储完全一样输入和存储的数据不被返回其存储在数据库中的精神,国际字符。

如果我输入“çanakçömlekpatladı”,然后点击保存我使用窗体上的页面显示“çanakçömlekpatladı”,但数据库已存储“çanakçömlekpatlad? 如果我再次访问该网页时得到“￧anak￧mlekpatlad?””如果我单击窗体上保存不做改变的数据库存储“?阿纳?? mlek patlad? 浏览器显示“?阿纳?? mlek patlad?

我有我有以下配置MySQL服务器:

default-collation=utf8
collation_server=utf8_unicode_ci
character_set_server=utf8
default-character-set=utf8

该数据库字符集是UTF8和数据库归类为utf8_unicode_ci和我使用的表设置为相同的。

我的JSP文件的第一行是:

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

HTML标头是像这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>

我有一个EncodingFilter类编译是:

import java.io.IOException;
import javax.servlet.*;

public class EncodingFilter
    implements Filter
{

    public EncodingFilter()
    {
    }

    public void init(FilterConfig filterconfig)
        throws ServletException
    {
        filterConfig = filterconfig;
        encoding = filterConfig.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
        throws IOException, ServletException
    {
        servletrequest.setCharacterEncoding(encoding);
        filterchain.doFilter(servletrequest, servletresponse);
    }

    public void destroy()
    {
    }

    private String encoding;
    private FilterConfig filterConfig;
}

这个类是在我的web.xml文件中引用如下:

<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

我已经重新启动我的系统,因此,Tomcat和MySQL服务器,检查日志,还有与上述任何配置的任何错误。

任何人都可以请大家帮忙,不然我就没有留下的头发?

Answer 1:

解决它,我抛弃了先前的DB Java类,并写了一个新的数据库功能就显得以前开发的一类是造成双重编码问题。

我是越来越重的“çanakçömlekpatladı”手动输入错误直接到相关的问题与MySQL不是VARCHAR字段真正交给UTF-8的数据库。 当我更新的领域VARBINARY,一切工作。

我希望这可以帮助别人,我敢肯定,我的头发会重新长出,谢谢大家谁提出的建议。



Answer 2:

从数据库中检索任何东西之前,执行SET NAMES UTF8查询,然后所有的查询。 然后,您将得到字符他们的样子。



Answer 3:

您需要检查以下几件事:

  1. 你的数据库应该支持多种语言(如果它的MySQL,在安装自己的时候,它会问你这个选项)。


Answer 4:

开始http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

在MySQL中你的性格,保持柱必须能够接受UTF-8字符。 大多数MySQL默认是latin1字符集,除非您的DDL脚本设置字符设置列。

如果你想从一个编码更改表到另一个,你可以做这样的:

mysql> ALTER TABLE t CONCERT TO CHARACTER SET 'utf8'

我想你也可以做到这一点在一列逐列基础上,如果你真的想为好。 请注意,ALTER可能需要一长串时间的表上有大量的数据,大量的索引,等等。



Answer 5:

当您连接到数据库,你能确保你设置“的characterEncoding”为“UTF-8”? 另外,如果你在浏览器中打开的网页(如ffox)什么是正在显示的字符编码?

我想你应该尝试了一下“分而治之”的。 重要的是要学习,如果MySQL是问题或没有(我不怀疑)。 要做到这一点,你可以将你的应用程序中的UTF字符串,并将其保存到数据库中。 如果这是行不通的,我们知道问题出在MySQL的。 如果它的工作原理,它可能是servlet。

它不会伤害到在servlet的水平补充一点:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");


Answer 6:

我有字符编码的问题(JSP-MySQL的)。我写的字符串URL = “的jdbc:mysql的://本地主机/ deneme了useUnicode =真和characterEncoding = ISO-8859-1?”; 并解决了这个问题。 但是,数据库的表必须UTF-8。



文章来源: JSP, MySQL and UTF-8