Sql 更改Oracle 11g XE上的NLS字符集参数
我正在使用Oracle 11g Express Edition。当前,当我使用Sql 更改Oracle 11g XE上的NLS字符集参数,sql,oracle,oracle11g,oracle-apex,oracle-xe,Sql,Oracle,Oracle11g,Oracle Apex,Oracle Xe,我正在使用Oracle 11g Express Edition。当前,当我使用SELECT*FROM NLS\u database\u parameters检查NLS字符集参数时它提供默认值: NLS_CHARACTERSET: AL32UTF8 NLS_NCHAR_CHARACTERSET: AL16UTF16 我想将这两个参数都设置为UTF8。我怎样才能做到?我刚刚安装了Oracle 11g XE,所以除了Oracle本身所需的数据外,没有其他数据。也许这是可行的:alter databa
SELECT*FROM NLS\u database\u parameters检查NLS字符集参数时代码>它提供默认值:
NLS_CHARACTERSET: AL32UTF8
NLS_NCHAR_CHARACTERSET: AL16UTF16
我想将这两个参数都设置为UTF8。我怎样才能做到?我刚刚安装了Oracle 11g XE,所以除了Oracle本身所需的数据外,没有其他数据。也许这是可行的:alter database character set UTF8代码>-->Oracle 10.1或更高版本不再支持
然而,你真的确定要改变它吗AL32UTF8实际上是UTF-8
在Oracle上还有一个名为UTF8
的字符集,这是一种用词不当的字符集。据我所知,这就像“1999年Unicode版本3的UTF-8”。只要使用小于65535(基本多语言平面)的Unicode字符,AL32UTF8
和UTF8
是相同的
注意,仅当新字符集是旧字符集的严格超集时,此命令才起作用。也就是说,您可以从US7ASCII
更改为AL32UTF8
或WE8ISO8859P1
,但您不能从WE8ISO8859P1
更改为AL32UTF8
这对我来说很有效,因为应用程序正在检查UTF8而不是al32f8ut8
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’;
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
一旦设置了安装,就无法更改。如果您想更改,则需要使用Oracle启动一个很长的过程。我尝试应用上述命令,它会给出以下错误<代码>SQL错误:ORA-12712:新字符集必须是旧字符集的超集
我同意不应更改字符集。但是我安装的应用程序需要NLS\u字符集
和NLS\u NCHAR\u字符集
设置为UTF8
。我怀疑任何应用程序都可能有这样的要求,除非它使用一些非常特殊的字符。我可以理解这一点。实际上我对Oracle数据库不太了解。如果您说IfAL32UTF8
是UTF8
,正如名称所示,这是很清楚的,但是对于NLS\u NCHAR\u字符集
,它的值为AL16UTF16
,因此它确实意味着它是UTF16
字符集。如何将该参数更改为UTF8?是的,它表示UTF-16NLS\u NCHAR\u字符集
用于数据类型nvarhar2
,respNCHAR
。在Unicode发明之前,它很有用。今天,实际上已经没有理由再使用这些数据类型之一了。将NLS_字符集设置为AL32UTF8与UTF8不同。例如:不能使用旧客户端(如Oracle Forms 6 runtime)连接到AL32UTF8数据库,但可以连接到UTF8数据库。命令:SELECT*FROM SYS.nls\u database\u参数代码>不起作用。不建议在生产数据库中使用它。它将损坏数据库,并将无法恢复,EM登录页面-损坏您的回答对我很有帮助。我试图更改停靠的Oracle XE中的默认字符集。如果命令序列<代码>立即停机,则有可能;启动限制;改变数据库字符集内部使用EE8ISO8859P2;立即关闭;启动代码>插入到此行之前: