Mybatis循环插入Oracle时,出现ORA-12704:字符集不匹配

Mybatis插入Oracle时,出现ORA-12704:字符集不匹配

Mybatis循环插入Oracle时,出现ORA-12704:字符集不匹配

代码如下:

 <foreach collection="list" item="item" separator="UNION ALL">
         select 
            '${item.id}'
           ,'${item.name}'
         from dual
 </foreach>

 

排查分析:

a、当list有2条数据,一条一条进行插入,则正常

b、2条循环插入则会报错,出现问题

原因分析:

union时,出现异常

解决思路:

百度oracle union时,出现ORA-12704:字符集不匹配

排查结果:

在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配

 select '中国','China',cast('中国' as nvarchar2(10)) T
 from dual
 union all
 select '美国','USA','' 
 from dual;

 

解决方法

  1、to_char()

 select '中国','China',to_char(cast('中国' as nvarchar2(10))) T
 from dual
 union all
 select '美国','USA','' 
 from dual;

  2、 用N' ',N''是将‘’转换为Unicode编码

 select '中国','China',cast('中国' as nvarchar2(10)) T
 from dual
 union all
 select '美国','USA',N'' 
 from dual;

因此,具体解决如下:

 <foreach collection="list" item="item" separator="UNION ALL">
     select 
           '${item.id}'
           ,N'${item.name}' --   添加N,解决字符集不匹配问题
     from dual
 </foreach>

 

参考文章:https://www.cnblogs.com/hyunbar/p/9844883.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值