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 版权协议,转载请附上原文出处链接和本声明。