JDBC写入Oracle时No-breaking space编码异常被替换为U+FFFD的问题求助
JDBC写入Oracle时No-breaking space编码异常被替换为U+FFFD的问题求助
各位好,我遇到一个棘手的编码问题,想请大家帮忙排查下:
我维护的一个遗留系统负责读取CSV文件并将数据写入Oracle数据库。目前发现某一行中的**非换行空格(No-breaking space)**出现了异常:
- 应用读取这个字符是正常的,能看到该列字符串对应的字节值为-96,对应无符号字节160,也就是Unicode的
U+00A0 - 但通过JDBC的
PreparedStatement.setObject(string)方法插入数据库后,用Oracle的DUMP()函数查看时,发现这个字符被替换成了Unicode替换字符U+FFFD(对应字节为239, 191, 189)
我已经排查了数据库的NLS参数:
NLS_CHARACTERSET的值为UTF8NLS_NCHAR_CHARACTERSET的值为AL16UTF16
数据库中对应的列类型是VARCHAR2
我现在完全没头绪,不知道问题出在哪个环节,有没有朋友遇到过类似情况,能给点排查方向或者解决建议吗?
内容来源于stack exchange
相关产品推荐
相关产品推荐

