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

Posted

技术标签:

【中文标题】在 Oracle 11g XE 上更改 NLS 字符集参数【英文标题】:Change NLS Character set parameters on Oracle 11g XE 【发布时间】:2014-07-09 20:35:19 【问题描述】:

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

NLS_CHARACTERSET: AL32UTF8
NLS_NCHAR_CHARACTERSET: AL16UTF16

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

【问题讨论】:

命令:SELECT * FROM SYS.nls_database_parameter; 不起作用。 【参考方案1】:

当应用程序检查 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

【讨论】:

EM 登录页面 - 已损坏 您的回答对我很有帮助。我试图更改 dockerized Oracle XE 中的默认字符集。如果在此行之前插入命令序列SHUTDOWN IMMEDIATE; STARTUP RESTRICT; ALTER DATABASE CHARACTER SET INTERNAL_USE EE8ISO8859P2; SHUTDOWN IMMEDIATE; STARTUP; 是可能的:github.com/oracle/docker-images/blob/…【参考方案2】:

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

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

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

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

【讨论】:

我试过应用提到的命令,它给出了以下错误。 SQL Error: ORA-12712: new character set must be a superset of old character set 我同意不应更改字符集。但是我正在安装的应用程序需要将NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET 设置为UTF8 我怀疑任何应用程序都可能有这样的要求 - 除非它使用一些 非常 特殊字符。 我能理解。其实我对Oracle数据库不太了解。如果你说如果AL32UTF8UTF8,顾名思义,这很清楚,但对于NLS_NCHAR_CHARACTERSET,它的值是AL16UTF16,所以它确实意味着它是UTF16 字符集。如何将该参数更改为 UTF8? 是的,它表示 UTF-16。 NLS_NCHAR_CHARACTERSET 用于数据类型NVARCHAR2,分别用于NCHAR。在 Unicode 发明之前,它在早期很有用。今天实际上没有理由再使用这些数据类型之一了。 将 NLS_CHARACTERSET 设置为 AL32UTF8 与 UTF8 不同。例如:您无法使用旧客户端(如 Oracle Forms 6 运行时)连接到 AL32UTF8 数据库,但可以连接到 UTF8 数据库。 .【参考方案3】:

设置安装后,您将无法更改character set。如果你想改变,那么你需要向 Oracle 提出 SR 的过程很长。

【讨论】:

【参考方案4】:
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’;

【讨论】:

完全不推荐用于生产数据库。它将损坏数据库并且将无法恢复,

以上是关于在 Oracle 11g XE 上更改 NLS 字符集参数的主要内容,如果未能解决你的问题,请参考以下文章

PLSQL Developer12连接远程Oracle xe 11g

Oracle XE 11g XE 数据库未找到

Oracle 11g XE "alter table drop column" 导致 ORA-00600

Oracle 11g XE release2安装与指导

Oracle 11g XE 试用记录

安装 Oracle 数据库 11g 时检查 Oracle XE 服务实例失败我该怎么办