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

  • Post author:
  • Post category:其他


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



版权声明:本文为weixin_42165041原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。