字符集的问题,请教大家!

[复制链接]
查看11 | 回复6 | 2007-3-30 16:20:59 | 显示全部楼层 |阅读模式
Win200k+oracle9207
某公司数据库:
SQL> select * from v$nls_parameters where parameter like '%SET%';
PARAMETER
VALUE
----------------------------------------------------------- -----------
NLS_CHARACTERSET
UTF8
NLS_NCHAR_CHARACTERSET UTF8

客户端是windowsXP,Active code page 为 936
问题是:
1、当客户端NLS_LANG = American_America.WE8ISO8859P1时,数据库中表的中文字符可以正确显示
2、当客户端NLS_LANG = SIMPLIFIED CHINESE_CHINA..ZHS16GBK时,数据库中表的中文字符显示为乱码。
请教:
1、为什么ZHS16GBK的设置不能正确显示中文?
2、可以判断出应用程序输入时的字符集设置码?
回复

使用道具 举报

千问 | 2007-3-30 16:20:59 | 显示全部楼层
SELECT * FROM NLS_DATABASE_PARAMETER;
UTF8和ZHS16GBK编码规则不同的。
http://zhouwf0726.itpub.net/post/9689/391775
回复

使用道具 举报

千问 | 2007-3-30 16:20:59 | 显示全部楼层
客户端操作系统的字符集要与设置的NLS_LANG字符集一致或者是子集与超集的关系。这样就不会乱码了
回复

使用道具 举报

千问 | 2007-3-30 16:20:59 | 显示全部楼层
最初由 xj4700 发布
[B]Win200k+oracle9207
某公司数据库:
SQL> select * from v$nls_parameters where parameter like '%SET%';
PARAMETER
VALUE
----------------------------------------------------------- -----------
NLS_CHARACTERSET
UTF8
NLS_NCHAR_CHARACTERSET UTF8

客户端是windowsXP,Active code page 为 936
问题是:
1、当客户端NLS_LANG = American_America.WE8ISO8859P1时,数据库中表的中文字符可以正确显示
2、当客户端NLS_LANG = SIMPLIFIED CHINESE_CHINA..ZHS16GBK时,数据库中表的中文字符显示为乱码。
请教:
1、为什么ZHS16GBK的设置不能正确显示中文?
2、可以判断出应用程序输入时的字符集设置码? [/B]

你看得这个视图不对,如果要看数据库字符集应该看这个
v$nls_database_parameters
这里面涉及到字符集转换和字符编码的问题。
可以参考:
http://www.itpub.net/showthread. ... 47&pagenumber=1
回复

使用道具 举报

千问 | 2007-3-30 16:20:59 | 显示全部楼层
谢谢!
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER LIKE '%SET%';
PARAMETER
VALUE
------------------------------ ------------------------------
NLS_NCHAR_CHARACTERSET UTF8
NLS_CHARACTERSET
UTF8
结果与V$nls_parameters的结果是一样的。
By the way, 这2个视图有什么区别??
回复

使用道具 举报

千问 | 2007-3-30 16:20:59 | 显示全部楼层
最初由 xj4700 发布
[B]谢谢!
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER LIKE '%SET%';
PARAMETER
VALUE
------------------------------ ------------------------------
NLS_NCHAR_CHARACTERSET UTF8
NLS_CHARACTERSET
UTF8
结果与V$nls_parameters的结果是一样的。
By the way, 这2个视图有什么区别?? [/B]

Actually.there are 3 nls levels:
nls_database_parameters --db level
nls_instance_parameters - -- instance level
nls_session_parameters-- session level
回复

使用道具 举报

千问 | 2007-3-30 16:20:59 | 显示全部楼层
[php]
NCV31@ncts>select text from dba_views where view_name='NLS_DATABASE_PARAMETERS';
TEXT
--------------------------------------------------------------------------------
select name,
substr(value$, 1, 40)
from props$
where name like 'NLS%'

NCV31@ncts>select object_type from dba_objects where object_name='V$NLS_PARAMETERS';
OBJECT_TYPE
------------------
SYNONYM
NCV31@ncts>select * from dba_synonyms where synonym_name='V$NLS_PARAMETERS';
OWNER
SYNONYM_NAME
TABLE_OWNER
TABLE_NAME

------------------------------ ------------------------------ ------------------------------ --------------------------
PUBLIC
V$NLS_PARAMETERS
SYS
V_$NLS_PARAMETERS
NCV31@ncts>select object_type from dba_objects where object_name='V_$NLS_PARAMETERS';
OBJECT_TYPE
------------------
VIEW
NCV31@ncts>select text from dba_views where view_name='V_$NLS_PARAMETERS';
TEXT
--------------------------------------------------------------------------------
select "PARAMETER","VALUE" from v$nls_parameters
NCV31@ncts>select * from dict where table_name like '%FIXED%';
TABLE_NAME
COMMENTS
------------------------------ -----------------------------------------------------------------------
GV$FIXED_TABLE
Synonym for GV_$FIXED_TABLE
GV$FIXED_VIEW_DEFINITION Synonym for GV_$FIXED_VIEW_DEFINITION
GV$INDEXED_FIXED_COLUMN
Synonym for GV_$INDEXED_FIXED_COLUMN
V$FIXED_TABLE
Synonym for V_$FIXED_TABLE
V$FIXED_VIEW_DEFINITION
Synonym for V_$FIXED_VIEW_DEFINITION
V$INDEXED_FIXED_COLUMN Synonym for V_$INDEXED_FIXED_COLUMN
SYS@ncts>select * FROM GV$FIXED_VIEW_DEFINITION WHERE VIEW_NAME='V$NLS_PARAMETERS';
INST_ID VIEW_NAME
VIEW_DEFINITION
---------- ------------------------------ ---------------------------------------------------------------------------------------
1
V$NLS_PARAMETERS
selectPARAMETER , VALUE from GV$NLS_PARAMETERS where inst_id = USERENV('Instance')
SYS@ncts>select * FROM GV$FIXED_VIEW_DEFINITION WHERE VIEW_NAME='GV$NLS_PARAMETERS';
INST_ID VIEW_NAME
VIEW_DEFINITION
---------- ----------------------------------------------------------------------------------------------------------------------------
1
GV$NLS_PARAMETERS
select inst_id,parameter, value from x$nls_parameters where parameter != 'NLS_SPECIAL_CHARS'
此问题酬劳:200PB,谢谢!
[/php]
此问题酬劳:200PB,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行