oracle字符集

oracle服务器环境
操作系统: redhat linux7.1
oracle版本: oracle8.1.7
字符集相关的属性:
1、在sys.props$ 中
nls_language AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSE ZHS16GBK
2、运行select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
3 安装配置文件shell-mods.sh中有
export NLS_LANG="simplified chinese_china.zhs16gbk"
oracle客户端环境
操作系统: win2000
oracle版本: oracle8.1.7
字符集相关的属性:
1、注册表中的 nls_lang 为 NA
2、dbappscfg.properities文件中存在
#sqlplus_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

测试:在客户端 (测试过程中,改完字符集后都关闭程序,在重新运行)
1、修改nls_lang 等于任何值(试验值为NA12和AMERICAN_AMERICA.WE8ISO8859P1)
sqlworksheet 和应用程序 都正常
2、修改dbappscfg.properities文件中
的sqlplus_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
或sqlplus_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
sqlworksheet出现 ERROR: ORA-12560: TNSrotocol adapter error
应用程序正常
3、修改修改dbappscfg.properities文件中
的sqlplus_NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
sqlworksheet 和应用程序都正常

提问:
1 客户端字符集在那里配置?
2 sqlworksheet和一般应用程序字符集设置有何不同?
3 测试2把sqlplus_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK为何sqlworksheet不能正常运行
而设置SIMPLIFIED CHINESE_CHINA.ZHS16GBK就可以
4 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 和 AMERICAN_AMERICA.ZHS16GBK有何区别?
5 假设我有dba用户我如何知道服务器的字符集(我指的是SIMPLIFIED
HINESE_CHINA.ZHS16GBK这一整串,也就是说select userenv('language') from
dual; 得到的值在那个字典中)
6 在oracle8.0.5中客户端的字符集可以从注册表的nls_lang中修改即可,8.1.7的nls_lang
参数做什么用呢??

(上面的应用程序指的是用pb自己开发测试的程序)
谢谢大家的回答!!!!!!!
谢谢


测试补充
上面测试中的nls_lang为注册表中oracle键下面的值
若修改home0下的nls_lang的值
1、修改为 AMERICAN_AMERICA.ZHS16GBK
sqlworksheet 正常 应用程序正常
2、修改为 AMERICAN_AMERICA.US7ASCII
sqlworksheet 和 应用程序 查数据是乱码
3、修改为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK
sqlworksheet 正常 应用程序正常

新疑问:
在注册表中SIMPLIFIED CHINESE_CHINA.ZHS16GBK 和 AMERICAN_AMERICA.ZHS16GBK
对sqlworksheet为什么是一样的
oracle键下面的nls_lang值为什么 修改没有作用???
注册表中的几个nls_lang值各有什么作用???
谢谢!!!!!!!!!!!
谢谢!!!!!!!!!!!



1 客户端字符集在那里配置?
就是注册表里面相应OracleHome的NLS_LANG
2 sqlworksheet和一般应用程序字符集设置有何不同?
这个东西老是有问题,俺从来不用。
3 测试2把sqlplus_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK为何sqlworksheet不能正常运行
而设置SIMPLIFIED CHINESE_CHINA.ZHS16GBK就可以
同2。
4 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 和 AMERICAN_AMERICA.ZHS16GBK有何区别?
真正的字符集只是第三部分。前面两个部分分别是国家和地区。第三部分才是字符集。所以只要第三部分一样就是可以得。前面影响提示信息是中文还是英文。

5 假设我有dba用户我如何知道服务器的字符集(我指的是SIMPLIFIED
HINESE_CHINA.ZHS16GBK这一整串,也就是说select userenv('language') from
dual; 得到的值在那个字典中)
sys.props$ 里面有记录。
SQL> select value$ from sys.props$ where name like 'NLS_CHA%';
6 在oracle8.0.5中客户端的字符集可以从注册表的nls_lang中修改即可,8.1.7的nls_lang
参数做什么用呢??
和805地一样。
新问题:
主要是不同OracleHome用的。每个OracleHome可以有自己不同的设置。

还可以在dos窗口里面自己设置,比如
set nls_lang=american_america.zhs16gbk.
这样就只影响这个窗口里面的环境变量。



hi,
环境变量的NLS_LANG实际上是三部分,就如上文所说。
的一部分NLS_LANGUAGE,
第二部分NLS_TERRITORY
第三部分字符集。
都相应在sys.props$里面有字段描述的。
例子:
SQL> select name, substr(value$,1,30) from sys.props$;

NAME SUBSTR(VALUE$,1,30)
------------------------------ ------------------------------
DICT.BASE 2
DBTIMEZONE 0:00
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8DEC
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN

NAME SUBSTR(VALUE$,1,30)
------------------------------ ------------------------------
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZH:T
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_NCHAR_CHARACTERSET WE8DEC
NLS_RDBMS_VERSION 8.1.7.0.0
GLOBAL_DB_NAME DEV.WORLD
EXPORT_VIEWS_VERSION 8

22 rows selected.

其实在我看来,只有字符集才有用,别的似乎都没有什么关系。不影响存储,也不影响显示(被用户的环境变量覆盖)。不是确信,请指点。

你可以试下下面的语句,我也成功的修改过字符集.在SVRGRL中执行
shutdown immediate; --a long time
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET ZHS16GBK;

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER DATABASE OPEN;
alter database national character set ZHS16GBK;
SHUTDOWN IMMEDIATE;

STARTUP; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值