Cum îmi pot da seama dacă sistemul meu Oracle este setat să suporte caractere Unicode sau multibyte? (Programare, Oracle, Unicode, Plsql, Oracle11G)

zundarz a intrebat.

Înțeleg că Oracle suportă seturi de caractere multiple, dar cum pot determina dacă sistemul 11g actual în care lucrez are această funcționalitate activată?

2 răspunsuri
Justin Cave
SELECT *
  FROM v$nls_parameters
 WHERE parameter LIKE '%CHARACTERSET';

vă va arăta baza de date și setul de caractere naționale. Setul de caractere al bazei de date controlează codificarea datelor în CHAR și VARCHAR2 coloane. Dacă baza de date acceptă Unicode în aceste coloane, setul de caractere al bazei de date trebuie să fie AL32UTF8 (sau UTF8 în unele cazuri rare). Setul de caractere naționale controlează codificarea datelor în NCHAR și NVARCHAR2 coloane. Dacă setul de caractere al bazei de date nu suportă Unicode, este posibil să puteți stoca date Unicode în coloane cu aceste tipuri de date, dar acest lucru adaugă în general complexitate sistemului – este posibil ca aplicațiile să trebuiască să se modifice pentru a suporta setul de caractere național.

Rajesh

Unicode este un sistem de codificare a caracterelor care definește fiecare caracter în majoritatea limbilor vorbite din lume, Suport pentru Unicode în baza de date Oracle:

Character Set   Supported in RDBMS Release  Unicode Encoding
AL24UTFFSS      7.2 - 8i                    UTF-8
UTF8            8.0 - 11g                   UTF-8
UTFE            8.0 - 11g                   UTF-EBCDIC
AL32UTF8        9i - 11g                    UTF-8
AL16UTF16       9i - 11g                    UTF-16

Pentru a vă asigura că baza dvs. de date este Unicode, verificați valoarea parametrului „NLS_CHARACTERSET”, care trebuie să fie AL32UTF8 sau AL16UTF16 din lista de mai sus.

SQL>
SQL> SELECT * FROM v$nls_parameters WHERE parameter='NLS_CHARACTERSET';

PARAMETER                   VALUE               CON_ID
--------------------------- ------------------- ----------
NLS_CHARACTERSET            AL32UTF8            0

Pentru a modifica valoarea parametrului, vă rugăm să utilizați funcția Fullback, deoarece instrucțiunea ALTER DATABASE nu poate fi reluată și utilizați următoarele instrucțiuni:

SHUTDOWN IMMEDIATE
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;
SHUTDOWN IMMEDIATE;
STARTUP;

Comentarii

  • Comanda ALTER DATABASE CHARACTER SET ... nu mai este suportată de la Oracle 10R1, este posibil să vă distrugeți baza de date (a se vedea exemplul stackoverflow.com/questions/15224015/…). Cu toate acestea, dacă vechiul set de caractere este US7ASCII atunci această abordare poate funcționa în mod excepțional. –  > Por Wernfried Domscheit.