当sqserver的N遇到mybatis

来源:互联网 发布:将java对象转换成json 编辑:程序博客网 时间:2024/06/06 02:19

之前使用mybatis的时候都是使用的#{}预处理的方式,但是有一种情况使用这种方式是不好使的,所以就给改成了${}的方式,事情的起因是这样的:

由于我们的服务,机器,虚拟机等等所有用的都是微软云的服务,包括数据库也是微软的sqlserver,当初数据库建库的时候,并没有指定其排序规则,而是默认的:SQL_Latin1_General_CP1_CI_AS(拉丁文啊),是不支持中文的,在跟微软提供服务的人沟通无果的情况下(要求在数据库层面解决),只能在程序上解决了,以下是解决办法:

首先将需要插入中文的表字段由原来的varchar改为了nvarchar,支持unicode的,然后在写sql的时候要在对应的值前面+N,比如原来的sql是:

insert into student(name,age,sex) values('张三',10,'男')

现在要给改成

insert into student(name,age,sex) values(N'张三',10,N'男')

那么原来的mybatis的sql是:insert into student(name,age,sex) values(#{s.name},#{s.age},#{s.sex}) 这种预处理的方式改为了

   insert into student(name,age,sex) values(N'${s.name}',#{s.age},N'${s.sex}') Statement的方式了

那么问题来了,如果我的name跟sex中包含了单引号的情况下,是入不了库的,目前临时的解决办法是在入库之前判断一下,如果name和sex中包含了单引号,我要给替换掉。唉,希望早点把数据库的排序规则改成支持中文的,从根源解决问题。。。

0 0
原创粉丝点击