2014-05-21 120 views
3

我正在使用Oracle 11g Express Edition。目前,当我检查使用SELECT * FROM nls_database_parameters; NLS字符集参数,它提供了默认值:在Oracle 11g XE上更改NLS字符集参数

NLS_CHARACTERSET: AL32UTF8 
NLS_NCHAR_CHARACTERSET: AL16UTF16 

我想设置这两个参数为UTF8。我该怎么做?我刚刚安装了Oracle 11g XE,因此除Oracle自身需要的数据外没有数据。

+1

命令:'SELECT * FROM SYS.nls_database_parameter;'不起作用。 –

回答

2

也许这个作品:alter database character set UTF8;

但是,你真的一定要改变它呢? AL32UTF8实际上是 UTF-8。

在Oracle上,您还有一个字符集,名称为UTF8,这是一种用词不当,意思是字符集CESU-8。据我所知,这就像“1999年Unicode版本3的UTF-8”一样。只要您使用的Unicode字符少于65535(基本多语言平面)AL32UTF8UTF8是相同的。

注意,只有当新字符集是旧字符集的严格超集时,此命令才有效。即您可以将US7ASCII更改为AL32UTF8WE8ISO8859P1,但不能将其从WE8ISO8859P1更改为AL32UTF8

+1

我试过应用提到的命令,它给出了以下错误。 'SQL错误:ORA-12712:新字符集必须是旧字符集的超集' 我同意不应更改字符集。但是我正在安装的应用程序需要将'NLS_CHARACTERSET'和'NLS_NCHAR_CHARACTERSET'设置为'UTF8'。 –

+0

我相信任何应用程序都可能有这样的要求 - 除非它使用了一些**非常特殊的字符。 –

+0

我可以理解。其实我并不太了解Oracle数据库。如果你说如果'AL32UTF8'是'UTF8',它的名字就是明确的,但对于'NLS_NCHAR_CHARACTERSET',它的值是'AL16UTF16',所以它意味着它是'UTF16'特性。 如何将该参数更改为UTF8? –

-2
SQL> shutdown immediate; 

SQL> startup restrict 

SQL> select name from v$database; 

SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE WE8MSWIN1252 ; 

SQL> select value from NLS_DATABASE_PARAMETERS where parameter=’NLS_CHARACTERSET’; 

SQL> shutdown immediate; 

SQL> startup 

SQL> select value from NLS_DATABASE_PARAMETERS where parameter=’NLS_CHARACTERSET’; 
+0

生产数据库不建议使用。它会损坏数据库并且将无法恢复, –

3

这为我工作,其中一个应用程序检查UTF8 rather than AL32UTF8

SQL> shutdown immediate; 

SQL> startup restrict 

SQL> select name from v$database; 

SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8 ; 

SQL> select value from NLS_DATABASE_PARAMETERS 
    where parameter=’NLS_CHARACTERSET’; 

SQL> shutdown immediate; 

SQL> startup 
+0

EM登录页面 - 损坏 – Velmurugan