SQL错误:ORA-12712:新字符集必须是旧字符集的超集

Daw*_*ood 5 oracle utf-8

我想将oracle数据库的字符集从'WE8MSWIN1252'更改为'AL32UTF8'

我尝试从链接执行以下步骤(http://download.oracle.com/docs/cd/B10501_01/server.920/a96529/ch10.htm#1009580):

使用SHUTDOWN IMMEDIATE或SHUTDOWN NORMAL语句关闭数据库.执行数据库的完整备份,因为无法回滚ALTER DATABASE CHARACTER SET语句.填写以下声明:

STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET AL32UTF8;
Run Code Online (Sandbox Code Playgroud)

但是当我执行上述语句时,我收到以下错误

SQL错误:ORA-12712:新字符集必须是旧字符集的超集

任何人都可以帮我解决这个问题.

Nul*_*ion 10

ALTER DATABASE CHARACTER SET成功执行语句,必须满足两个条件:

  • 当前字符集中的每个字符都可在新字符集中使用.
  • 当前字符集中的每个字符在新字符集中具有相同的代码点值.(即:旧的charset必须是新的charset的子集)

因为WE8MSWIN1252不是AL32UTF8此语句的严格子集将失败(例如:井号是A3十六进制WE8MSWIN1252,但在AL32UTF8其中C2 A3).

您需要使用它CSALTER来执行此迁移.

请参阅:字符集迁移.


Wal*_*ado 5

最简单的方法:(需要关机)

首先,以 sysdba 身份连接:

sqplus / as sysdba
Run Code Online (Sandbox Code Playgroud)

接下来,执行以下脚本:

alter system set nls_length_semantics=CHAR scope=both;
shutdown;
startup restrict;
alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;
Run Code Online (Sandbox Code Playgroud)

它在 Oracle 12c 标准二版中对我有用

摘自:https : //www.elblogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html(更新后的网址)