在 Oracle 11g XE 上更改 NLS 字符集参数

Par*_*gat 6 sql oracle oracle-xe oracle11g oracle-apex

我正在使用 Oracle 11g 快捷版。目前,当我使用SELECT * FROM nls_database_parameters;它检查 NLS 字符集参数时,它给出了默认值:

NLS_CHARACTERSET: AL32UTF8
NLS_NCHAR_CHARACTERSET: AL16UTF16
Run Code Online (Sandbox Code Playgroud)

我想将这两个参数都设置为 UTF8。我怎么能这样做?我刚刚安装了Oracle 11g XE,所以除了Oracle本身需要的数据外,没有数据。

小智 6

这对我有用,其中应用程序正在检查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
Run Code Online (Sandbox Code Playgroud)


Wer*_*eit 3

也许这有效:alter database character set UTF8; --> Oracle 10.1 或更高版本不再支持。

然而,你真的确定要改变吗?AL32UTF8 实际上是UTF-8。

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

请注意,仅当新字符集是旧字符集的严格超集时,此命令才有效。即,您可以从 更改为US7ASCIIAL32UTF8WE8ISO8859P1但不能从 更改WE8ISO8859P1AL32UTF8

  • 是的,这意味着UTF-16。“NLS_NCHAR_CHARACTERSET”用于数据类型“NVARCHAR2”或“NCHAR”。它在 Unicode 发明之前的早期很有用。如今,实际上没有理由再使用其中一种数据类型。 (2认同)