java/jsp-向mysql写数据时出现了中文乱码

来源:互联网 发布:windows 远程桌面 打开 编辑:程序博客网 时间:2024/05/01 04:18

java与jsp对于mysql的操作大致是相同的,在此以jsp为例进行介绍。   

JSP页面想mysql插入数据,但中文现出了:“???”这样的乱码,第一反应是直接在mysql 里执行插入中文语句,mysql成功了,没有出现乱码(对于直接插入也是乱码的情况最后也进行介绍)。于是上网找了很多资料: 其实无论是用什么编码:gb2312或者utf-8,都要遵循编码统一的道理。就是说如果你在页面中采用了utf-8,那么你建mysql表时也如此,以下是如处需要统一的地方:

  1. 在jsp页面的<%@ page 位置加上 contentType=”text/html; charset=utf-8″ %>,<meta 的位置也是如此:content=”text/html;charset=utf-8″ />
  2. 建立一个mysql数据库,字符集采用utf-8,建表也是如此。
  3. 在getConnection的URL中加上:?useUnicode=true&characterEncoding=UTF-8″,如:url = “jdbc:mysql://localhost:3306/(此处为数据库名称)?useUnicode=true&characterEncoding=UTF-8″,也就是在(数据库名称)的后面             其中问号不能丢



  4. 如果你不是在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 SetCharacterEncodingFilter implements Filter {
        class Request extends HttpServletRequestWrapper
        {
            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>SetCharacterEncodingFilter</filter-name>
       <filter-class>peom.SetCharacterEncodingFilter</filter-class>
     </filter>
     <filter-mapping>
       <filter-name>SetCharacterEncodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
     </filter-mapping>

    这里要注意的是:路径、代码尽量放在前面,最好是<web-app 的后面

 对于直接想mysql插入也是乱码的情况进行介绍
 1.我用的SQLyog进行的mysql管理,在建立数据库时,直接进行设置
 
2.在建立表时sql语句进行设置
如下面见表的sql语句 其中DEFAULT CHARSET=gbk,指定类型。
CREATE TABLE `tb_waterflower` (
  `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
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么在手机上看wifi密码怎么办 怎么查自己的宽带密码忘记了怎么办 怎么查自己宽带账号密码忘了怎么办 电脑重置路由器密码连不上网怎么办 e盘和f盘没有了怎么办 复制文件过程中自己卡住了怎么办 电脑卡住了怎么办 鼠标也点不动 善领wifi连上网不能用怎么办 苹果手机软件更新后网速太慢怎么办 装了固态硬盘开机还慢怎么办 华为荣耀8青春版玩游戏卡怎么办 光猫自带wifi网络很差怎么办 侠盗猎车手自由城之章卡退怎么办? 夏天带头盔晃眼睛太厉害怎么办 别人把钱误转我卡上我怎么办? 家里预留的的网线太短怎么办 电信路由器坏了网线接口断了怎么办 数据线充手机的接头处断了怎么办 新买的小米手环充不进去电怎么办 绝地求生手游被队友故意炸死怎么办 一加3t屏幕开了怎么办? 孕妇吃了8个杏怎么办啊 洗碗盆落水器垫子密封不好怎么办? 手剥橙子剥的特别疼怎么办? 经常带对讲机的耳麦耳朵痛怎么办 公安检查遇到穿便装的军人怎么办 cf幽灵鬼呼吸辅军训刘海怎么办助 眼睛被等离子切割器的光烤了怎么办 玩王者的时候屏幕竖着了该怎么办 铝合金门双包门套比墙的厚了怎么办 磁共振检查后发现带金属了怎么办 贴了乳贴过免痒怎么办 yy别人听见我打游戏的声音怎么办 微信的聊天记录发错邮箱怎么办 百度云盘文件有违规内容怎么办 天籁一键启动钥匙没电怎么办 中兴手机系统界面已停止运行怎么办 怎么办可以复制成不关联的文档 希捷400g硬盘电机不转怎么办 金立手机微信语音播放失败怎么办 手机4g网络变2g怎么办