66 votes

Différence entre VARCHAR2(10 caractères) et NVARCHAR2(10)

J'ai installé la Base de données Oracle 10g Express Edition (Universal) avec les paramètres par défaut:

SELECT * FROM NLS_DATABASE_PARAMETERS;

NLS_CHARACTERSET               AL32UTF8                                 
NLS_NCHAR_CHARACTERSET         AL16UTF16                                

Étant donné que les deux CHAR et NCHAR types de données semblent accepter multi-chaînes d'octets, quelle est la différence exacte entre ces deux définitions de colonne?

VARCHAR2(10 CHAR)
NVARCHAR2(10)

90voto

Vincent Malgrat Points 42899

Le NVARCHAR2 type de données a été introduit par Oracle pour les bases de données qui souhaitent utiliser l'Unicode pour certaines colonnes, tout en conservant un autre jeu de caractères pour le reste de la base de données (qui utilise VARCHAR2). Le NVARCHAR2 est une Unicode uniquement type de données.

Une raison pour laquelle vous souhaitez utiliser NVARCHAR2 peut-être que votre base de données utilise un caractère non-Unicode et vous voulez toujours être en mesure de stocker des données Unicode pour certaines colonnes. Une autre raison pourrait être que vous souhaitez utiliser deux jeu de caractères Unicode (AL32UTF8 pour les données qui provient principalement de l'Europe de l'ouest, al16utf16, respectivement pour les données qui provient principalement de l'Asie par exemple), parce que les différents jeux de caractères ne pas stocker les mêmes données aussi efficacement.

Les deux colonnes dans votre exemple (Unicode VARCHAR2(10 CHAR) et NVARCHAR2(10)) serait en mesure de stocker le même, mais dans l'octet de stockage sera différent. Certaines chaînes peuvent être stockées de manière plus efficace dans l'un ou l'autre.

Notez également que certaines fonctionnalités ne fonctionnent pas avec les NVARCHAR2, voir ce DONC, la question:

-2voto

sjngm Points 4108

NVARCHAR2 est la langue d'extension spécifique pour VARCHAR2 pour les caractères multi-octets et des trucs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X