在 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】:
也许这可行: --> Oracle 10.1 或更高版本不再支持。alter database character set UTF8;
但是,你真的确定要改变它吗? AL32UTF8
是 UTF-8,实际上。
在 Oracle 上,您还有一个名为 UTF8
的字符集,这是一种用词不当,意思是字符集 CESU-8。据我所知,这就像“从 1999 年开始的 Unicode 版本 3 的 UTF-8”。只要你使用小于 65535 的 Unicode 字符(基本多语言平面)AL32UTF8
和UTF8
是相同的。
注意,此命令仅在新字符集是旧字符集的严格超集时才有效。 IE。您可以从US7ASCII
更改为AL32UTF8
或WE8ISO8859P1
,但您不能从WE8ISO8859P1
更改为AL32UTF8
。
【讨论】:
我试过应用提到的命令,它给出了以下错误。SQL Error: ORA-12712: new character set must be a superset of old character set
我同意不应更改字符集。但是我正在安装的应用程序需要将NLS_CHARACTERSET
和NLS_NCHAR_CHARACTERSET
设置为UTF8
。
我怀疑任何应用程序都可能有这样的要求 - 除非它使用一些 非常 特殊字符。
我能理解。其实我对Oracle数据库不太了解。如果你说如果AL32UTF8
是UTF8
,顾名思义,这很清楚,但对于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