您的位置:首页 > 数据库 > Oracle

查看和修改Oracle服务器端字符集

2012-06-27 16:42 302 查看
查看和修改Oracle服务器端字符集:

如果在安装Oracle10g的时候没有选择字符集,则按照下面的3步进行字符集的修改就可以完全正常的使用Oracle10g

在服务器上以oracle用户登录

$sqlplus / as sysdba;

1、检查服务器上Oracle数据库的字符集

SQL> col value$ format a40

SQL> select name,value$ from props$;

NAME VALUE$

------------------------------ -------------------------

DICT.BASE 2

NLS_LANGUAGE AMERICAN

NLS_TERRITORY AMERICA

NLS_CURRENCY $

NLS_ISO_CURRENCY AMERICA

NLS_NUMERIC_CHARACTERS .,

NLS_DATE_FORMAT DD-MON-YY

NLS_DATE_LANGUAGE AMERICAN

NLS_CHARACTERSET ZHS16GBK

NLS_SORT BINARY

NLS_CALENDAR GREGORIAN

NLS_RDBMS_VERSION 7.3.4.0.0

GLOBAL_DB_NAME ORACLE.WORLD

EXPORT_VIEWS_VERSION 3

NLS_CHARACTERSET和NLS_CHAR_CTERSET这个参数应该是ZHS16GBK,如不是,修改:

SQL> update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';

2、确认字符集是否修改的不彻底。

SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,

DECODE(TYPE#, 1,

DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'),

9,

DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),

96,

DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),

112,

DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN

FROM SYS.COL$

WHERE CHARSETFORM IN (1, 2)

AND TYPE# IN (1, 9, 96, 112);

3、如果上面的查询的确显示有多个字符集的设定,则进行如下处理(一条一条输入并执行):

SHUTDOWN IMMEDIATE;

STARTUP MOUNT;

ALTER SYSTEM ENABLE RESTRICTED SESSION;

ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

ALTER SYSTEM SET AQ_TM_PROCESSES=0;

ALTER DATABASE OPEN;

(这里需要一行一行执行)

COL VALUE NEW_VALUE CHARSET;

SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

COL VALUE NEW_VALUE NCHARSET;

SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';

--INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化(这里需要一行一行执行)

ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;

ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

SHUTDOWN IMMEDIATE;

STARTUP;

最后在PL/SQL客户端上测试:

以system登录:

create table k(n varchar2(20));

insert into k values('你我yown');

select * from k;

若查询出来的数据没有乱码,即已设置正确!

删除测试表:

drop table k;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: