SQL Error: ORA-12712: new character set must be a superset of old character set

前端 未结 4 474
北荒
北荒 2021-01-13 09:47

I want to change character set of oracle database from \'WE8MSWIN1252\' to \'AL32UTF8\'

I tried to execute following steps from the link (http://download.oracle.com/

相关标签:
4条回答
  • 2021-01-13 09:57

    For an ALTER DATABASE CHARACTER SET statement to execute successfully, two conditions must be fulfilled:

    • Each and every character in the current character set is available in the new character set.
    • Each and every character in the current character set has the same code point value in the new character set. (ie: the old charset must be a subset of the new one)

    Because WE8MSWIN1252 is not a strict subset of AL32UTF8 this statement will fail (example: the pound sign is A3 in hex in WE8MSWIN1252, but in AL32UTF8 it is C2 A3).

    You'll need to use CSALTER to do this migration.

    Refer to: Character Set Migration.

    0 讨论(0)
  • 2021-01-13 10:04

    replace line 6 by

    ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;

    this solved my problem.

    0 讨论(0)
  • 2021-01-13 10:19

    The Easiest way: (Shutdown neccesary):

    First, Connect as sysdba:

    sqplus / as sysdba
    

    Next, execute the following script:

    alter system set nls_length_semantics=CHAR scope=both;
    shutdown;
    startup restrict;
    alter database character set INTERNAL_USE WE8ISO8859P1;
    shutdown;
    startup;
    

    It worked for me in a Oracle 12c Standard Two Edition

    Taken from: https://www.elblogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html (updated URL)

    0 讨论(0)
  • 2021-01-13 10:21

    Below worked for me in 19C.

    Issue

    import done in AL32UTF8 character set and AL16UTF16 NCHAR character set export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set Warning: possible data loss in character set conversions

    Steps

    Database started in Restriction mode.

    SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

    PARAMETER

    VALUE

    NLS_CHARACTERSET AL32UTF8

    SQL> alter database character set WE8MSWIN1252; alter database character set WE8MSWIN1252 * ERROR at line 1: ORA-12712: new character set must be a superset of old character set

    SQL> alter database character set INTERNAL_USE WE8MSWIN1252;

    Database altered.

    SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

    PARAMETER

    VALUE

    NLS_CHARACTERSET WE8MSWIN1252

    SQL>

    Cheers! RaJ...

    0 讨论(0)
提交回复
热议问题