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