日期:2014-05-17  浏览次数:20846 次

关于oracle 11g 如何更改字符集合
如题!最好来直接操作方式的,不要命令方式
还有我,我在网页中那个输sql命令的地方输入:conn / as sysdba 命令,会提示我语法错误,怎么回事,难道11g变了语法?
------最佳解决方案--------------------
-- 3.5 字符集的更改 ( P94 )
-- 数据库创建以后,如果需要修改字符集,通常需要重建数据库,通过导入导出的方式来转换。也可以通过以下方式更改:
ALTER DATABASE CHARACTER SET

-- 注意修改数据库字符集时必须谨慎,修改之前一定要为数据库备份。由于不能回退这项操作,因此可能会造成数据丢失或者损坏。

-- 这是最简单的转换字符集的方式,但并不是总是有效。这个命令在Oracle 8时被引入Oracle,这个操作在本质上并不转换任何数据库字符,
-- 只是简单地更新数据库中所有跟字符集相关的信息。

-- 这意味着只能在新字符集是旧字符集严格超集的情况下使用这种方式转换。所谓超集是指当前字符集中的每一个字符集在新字符集中都可以表示,并使用相同的代码点,
-- 比如很多字符集都是US7ASCII的严格超集。

-- 如果不是超集将获得以下错误:
SQL> ALTER DATABASE CHARACTER SET ZHS16CGB231280;
*
ERROR at line 1:
ORA-12712: new character_set_must bu a superset of old character set

-- 下面来看一个测试(以下测试在Oracle 9.2.0下进行,Oracle 9i较Oracle 8i在编码方面有较大改变,在Oracle 8i中,测试结果可能略有不同):
SQL> select name, value$ from props$ where name like '%NLS%';

NAME                      VALUE$
------------------------- -----------------------------------
NLS_LANGUAGE              AMERICAN
NLS_NCHAR_CHARACTERSET    AL16UTF16
NLS_TERRITORY             AMERICA
NLS_CURRENCY              $
NLS_ISO_CURRENCY          AMERICA
NLS_NUMERIC_CHARACTERS    .,
NLS_CHARACTERSET          AL32UTF8
NLS_CALENDAR              GREGORIAN
NLS_DATE_FORMAT           DD-MON-RR
NLS_DATE_LANGUAGE         AMERICAN
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 TZR
NLS_TIMESTAMP_TZ_FORMAT   DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY         $
NLS_COMP                  BINARY
NLS_LENGTH_SEMANTICS      BYTE
NLS_NCHAR_CONV_EXCP       FALSE
NLS_RDBMS_VERSION         10.2.0.4.0

20 rows selected.

create table scott.test(id number(18,0), name varchar2(20));
insert into scott.test(id,name) values(1,'盖');
insert into scott.test(id,name) values(2,'gai');

SQL> select name, dump(name) from scott.test;

......

-- 转换字符集,数据库应该在RESTRICTED模式下进行:
C:\> sqlplus "/ as sysdba"

......

SQL> shutdown immediate;

......

SQL> startup moun