Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Diferença entre NVARCHAR no Oracle e SQL Server?


Sim, se seu banco de dados Oracle for criado usando um conjunto de caracteres Unicode, um NVARCHAR no SQL Server deve ser migrado para um VARCHAR2 em Oráculo. No Oracle, o NVARCHAR tipo de dados existe para permitir que os aplicativos armazenem dados usando um conjunto de caracteres Unicode quando o conjunto de caracteres do banco de dados não oferece suporte a Unicode.

Uma coisa para estar ciente na migração, no entanto, é a semântica do comprimento do caractere. No SQL Server, um NVARCHAR(20) aloca espaço para 20 caracteres que requer até 40 bytes em UCS-2. No Oracle, por padrão, um VARCHAR2(20) aloca 20 bytes de armazenamento. No AL32UTF8 conjunto de caracteres, que é potencialmente apenas espaço suficiente para 6 caracteres, embora provavelmente lidará com muito mais (um único caractere em AL32UTF8 requer entre 1 e 3 bytes. Você provavelmente deseja declarar seus tipos Oracle como VARCHAR2(20 CHAR) que indica que você deseja alocar espaço para 20 caracteres, independentemente de quantos bytes são necessários. Isso tende a ser muito mais fácil de comunicar do que tentar explicar por que algumas sequências de 20 caracteres são permitidas enquanto outras sequências de 10 caracteres são rejeitadas.

Você pode alterar a semântica de comprimento padrão no nível da sessão para que todas as tabelas que você criar sem especificar nenhuma semântica de comprimento usem a semântica de caractere em vez de byte
ALTER SESSION SET nls_length_semantics=CHAR;

Isso permite que você evite digitar CHAR cada vez que você define uma nova coluna. Também é possível definir isso no nível do sistema, mas isso é desencorajado pela equipe do NLS - aparentemente, nem todos os scripts fornecidos pela Oracle foram testados exaustivamente em bancos de dados onde o NLS_LENGTH_SEMANTICS foi mudado. E provavelmente muito poucos scripts de terceiros foram.