【问题标题】:Change NLS Character set parameters on Oracle 11g XE在 Oracle 11g XE 上更改 NLS 字符集参数
【发布时间】: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; 不起作用。

标签: sql oracle oracle11g oracle-apex oracle-xe


【解决方案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’;
    

    【讨论】:

    • 完全不推荐用于生产数据库。它将损坏数据库并且将无法恢复,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2016-04-26
    • 2018-07-07
    • 2013-11-29
    • 2021-10-18
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多