Oracle
 sql >> Database >  >> RDS >> Oracle

Differenza tra NVARCHAR in Oracle e SQL Server?

Sì, se il database Oracle viene creato utilizzando un set di caratteri Unicode, un NVARCHAR in SQL Server dovrebbe essere migrato a un VARCHAR2 in Oracle. In Oracle, il NVARCHAR il tipo di dati esiste per consentire alle applicazioni di archiviare i dati utilizzando un set di caratteri Unicode quando il set di caratteri del database non supporta Unicode.

Una cosa da tenere presente durante la migrazione, tuttavia, è la semantica della lunghezza dei caratteri. In SQL Server, un NVARCHAR(20) alloca spazio per 20 caratteri che richiedono fino a 40 byte in UCS-2. In Oracle, per impostazione predefinita, un VARCHAR2(20) alloca 20 byte di memoria. Nel AL32UTF8 set di caratteri, che è potenzialmente solo spazio sufficiente per 6 caratteri anche se molto probabilmente gestirà molto di più (un singolo carattere in AL32UTF8 richiede tra 1 e 3 byte. Probabilmente vuoi dichiarare i tuoi tipi Oracle come VARCHAR2(20 CHAR) che indica che si desidera allocare spazio per 20 caratteri indipendentemente dal numero di byte necessari. Questo tende a essere molto più facile da comunicare che cercare di spiegare perché alcune stringhe di 20 caratteri sono consentite mentre altre stringhe di 10 caratteri vengono rifiutate.

Puoi modificare la semantica della lunghezza predefinita a livello di sessione in modo che tutte le tabelle che crei senza specificare alcuna semantica della lunghezza utilizzino la semantica dei caratteri anziché dei byte

ALTER SESSION SET nls_length_semantics=CHAR;

Ciò ti consente di evitare di digitare CHAR ogni volta che definisci una nuova colonna. È anche possibile impostarlo a livello di sistema, ma farlo è sconsigliato dal team NLS:a quanto pare, non tutti gli script forniti da Oracle sono stati testati a fondo rispetto a database in cui NLS_LENGTH_SEMANTICS è stato cambiato. E probabilmente sono stati pochissimi gli script di terze parti.