初次装好PL/SQL,查询
1,
select * from basecar
![](http://d3e3fbe0.wiz03.com/share/resources/30685bf4-2257-481b-8ba9-29515dd272bb/index_files/ee4f6a1b-690d-4134-8405-784e144f1b88.png)
--查询出来的结果中文全部为?
2,
select * from basecar where truck_number='京AS888'
--肯定是有数据的,但查不到,只要有中文就查不到
百度的结果是数据库服务器端和客户端字符集不一致导致的。
查询服务器端的字符集
select userenv('language') from dual;
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
![](http://d3e3fbe0.wiz03.com/share/resources/30685bf4-2257-481b-8ba9-29515dd272bb/index_files/2e16c6c9-c9e4-4f84-b8a3-d20f7f947a8e.png)
![](http://d3e3fbe0.wiz03.com/share/resources/30685bf4-2257-481b-8ba9-29515dd272bb/index_files/31b9af27-8cba-40f9-b55b-995a5d90f6a3.png)
最重要的就是就是这个
ZHS16GBK
客户端的字符集,我在注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1)中也没找到NLS_LANG,就当它与服务器端不一样吧。
![](http://d3e3fbe0.wiz03.com/share/resources/30685bf4-2257-481b-8ba9-29515dd272bb/index_files/a88fe250-4c49-4548-8975-82586ce2dd30.png)
问题解决方法:
1,设置环境变量,
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
2,重启PL/SQL,上面两个SQL查询就正常了。
但是还有其他问题...
项目需要,
在windows服务中调用SQL查询,查询条件有中文,查不到数据,直接执行exe应用程序却可以查到数据,想不明白为什么...
不明白也要继续,在注册表中创建字符串值NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
![](http://d3e3fbe0.wiz03.com/share/resources/30685bf4-2257-481b-8ba9-29515dd272bb/index_files/ec403704-150b-45f0-b044-7155828969e2.png)
然后服务sql查询就正常了。
所以,简单、一步到位的做法就是在注册表中修改。
参考: