Hibernate连接SQL Server中文乱码问题解决

1. SQL的语言集,选择Chinese_PRC开头的就行, SQL 表tb_User字段,常规的Varchar即可。可以先行手工直接在SQL表中输入不会是乱码。

CREATE TABLE [dbo].[tb_User](
    [user_id] [int] IDENTITY(1,1) NOT NULL,
    [user_name] [varchar](50) NULL,
    [user_password] [varchar](50) NULL,
    [user_age] [int] NULL,
    [user_country] [varchar](50) NULL,

2. jsp页面,编码为UTF-8即可,Eclipse默认即可,页面如下图所示:

3.前台到后端的编码转换。前台页面传递到后台页面时,因编码不一致,后台获取到的是乱码,需要做一次转换,再传递至数据处理或者其他页面中,如下颜色标注,此处转换主要是解决controller返回Model时,返回的页面乱码问题,跟数据库存储没有关系,数据库存储在数据层处理转换即可。

@RequestMapping(value = "/Register.action", method = RequestMethod.POST)
public String RegisterUser(@ModelAttribute("user")User user, ModelMap model) throws UnsupportedEncodingException 
    {
        String name=user.getUser_name();
        String password=user.getUser_password();
        
        name=new String(name.getBytes("ISO-8859-1"),"UTF-8");//change the code
        
        if(name!="" && password!="")
        {
            User newUser= myUser.getUserByName(name);
            if(newUser==null)
            {
                if(myUser.AddUser(user))
                {
                    System.out.println("--------register ok-------------");
                    model.addAttribute("user_name",name);
                    model.addAttribute("user_password",password);
                    return "result";//to result.jsp
                }
                else
                {
                    System.out.println("------------register failed-------------");
                    return "UserRegister";//stay at current page
                }
            }
        }
        else
        {
            return "UserRegister";//stay at current page
        }
          
        return "UserRegister";
    }

4. 在Hibernate数据存储之前再执行一次转换,即后台数据存储之前执行一次转换,转换为UTF8。

    public boolean AddUser(User user) 
    {
        // TODO Auto-generated method stub
        Session session = this.sessionFactory.getCurrentSession();
        String convertStr;
        try
        {
            convertStr=new String(user.getUser_name().getBytes("ISO-8859-1"),"UTF-8");
            user.setUser_name(convertStr);

        }
        catch(Exception ex)
        {
            System.out.println("-------convert failed");
        }
        
        session.persist(user);//save user
        return true;
    }

5. SQL插入后显示,此时显示正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值