出现上面的情况一般都是服务端与客户端的编码不同导致的。
sqlplus db_user/123@test
登录进去,执行
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
可以得到服务端的编码,例如:AL32UTF8
我这里用的是临时设定环境变量,即:
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
这个使用后sqlplus进去后会变成乱码,不过不影响导出的工作。所以等导出后再使用
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
变回原来的编码即可。