oracle中无法查询中文条件

初次装好PL/sql,查询
1, select * from basecar
--查询出来的结果中文全部为?
2, select*frombasecarwheretruck_number='京AS888'
--肯定是有数据的,但查不到,只要有中文就查不到
百度的结果是数据库服务器端和客户端字符集不一致导致的。
1
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 
2
影响oracle数据库字符集最重要的参数是NLS_LANG参数。 
3
4
它的格式如下:   NLS_LANG = language_territory.charset 
5
6
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。 
7
8
其中: 
9
10
Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK 
11
12
NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。 
13
14
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 
15
16
如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。 
查询服务器端的字符集
userenv('language')fromdual;
select*fromv$nls_parametersparameter'NLS_CHARACTERSET';
最重要的就是就是这个 ZHS16GBK

客户端的字符集,我在注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1)中也没找到NLS_LANG,就当它与服务器端不一样吧。
问题解决方法
1,设置环境变量, NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
2,重启PL/sql,上面两个SQL查询就正常了。

但是还有其他问题...
项目需要, 在windows服务中调用SQL查询查询条件有中文,查不到数据,直接执行exe应用程序却可以查到数据,想不明白为什么...

不明白也要继续,在注册表中创建字符串值NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
然后服务SQL查询就正常了。

所以,简单、一步到位的做法就是在注册表中修改

参考:

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...