很诡异的oracle查询乱码,select * 乱码,select 字段 不乱码

数据库字符集:
图片说明

环境变量设置了:
图片说明

然后不管用plsql还是navicate,都是这样的结果:
图片说明
图片说明

就是select * from XXX的话就乱码,不仅仅是中文乱码,就是包含- .这样的字符也乱码,但是select 若干字段 from XXX就不乱码。
数据库是在centos7云服务器上的,自己安装的。

还请大神指导

我的环境变量 NLS_LANG 是 SIMPLIFIED CHINESE_CHINA.ZHS16GBK,oracle查询中文正常

找到原因了,是因为NLS_CHARATTERSET是AL32UTF8,但是NLS_NCHAR_CHARACTERSET设置的是UTF-8,把NLS_NCHAR_CHARACTERSET设置为AL16UTF16就可以了,跟查询正常的oracle数据库编码对比发现的这个,就试了一下竟然成功了,当然,编码改了之后重新导数据的

NLS_CHARATTERSET是AL32UTF8,但是NLS_NCHAR_CHARACTERSET设置的是UTF-8

Oracle中不要用*号

如果你用sqlplus命令行进行查询的话,如果还会乱码,一般是因为oracle客户端字符集的问题,只要吧客户端字符集改成与服务器端一致就OK;如果你sqlplus命令行没有乱码,而使用plsql developer 或者navicat 会乱码,那就要看本地操作系统的字符集是否与客户端服务器端的保持一致了。