Différence entre les littérales N'String et U'string dans Oracle

Quelle est la signification et la différence entre ces requêtes?

SELECT U'String' FROM dual;

et

SELECT N'String' FROM dual;
17
demandé sur mik 2018-01-03 14:25:30

3 réponses

Dans cette réponse, je vais essayer de fournir des informations à partir de sources officielles

(1) Le N" texte Littéral

N'' est utilisé pour convertir une chaîne de caractères NCHAR ou NVARCHAR2 type de données

selon cette documentation Oracle Oracle-Littérals

La syntaxe de littéraux de texte est comme suit:

enter image description here

N ou n spécifie le littéral en utilisant le jeu de caractères national (NCHAR ou NVARCHAR2 données).

aussi dans ce second article Oracle-Types De Données

N'String' est utilisé pour convertir une chaîne de caractères NCHAR type de données

à Partir de l'article ci-dessus:

L'exemple suivant compare l' translated_description colonne pm.product_descriptions tableau nationale jeu de caractères chaîne de caractères:

SELECT translated_description FROM product_descriptions
  WHERE translated_name = N'LCD Monitor 11/PM';

(2) L'U" Littérale

U'' est utilisé pour gérer la chaîne de caractères SQL NCHAR dans Oracle Call Interface (OCI)

basé sur cette documentation Oracle programmation avec Unicode

The Oracle Call Interface (OCI) est l'API de niveau le plus bas que le reste des produits d'accès à la base de données côté client utilisent. Il fournit une manière flexible pour les programmes C / C++ d'accéder aux données Unicode stockées dans SQL CHAR et NCHAR les types de données. En utilisant OCI, vous pouvez programmatiquement spécifier le jeu de caractères (UTF-8, UTF-16, et autres) pour que les données soient insérées ou extraites. Il accède à la base de données via Oracle Net.

OCI est L'API la plus basse pour accéder à une base de données, elle offre donc la meilleure performance possible.

Gestion SQL NCHAR Les Littéraux de chaîne dans le BEC

vous pouvez l'activer en paramétrant la variable d'environnement ORA_NCHAR_LITERAL_REPLACETRUE. Vous pouvez également obtenir ce comportement de manière programmatique en utilisant le OCI_NCHAR_LITERAL_REPLACE_ON et OCI_NCHAR_LITERAL_REPLACE_OFF modes de OCIEnvCreate() et OCIEnvNlsCreate(). Ainsi, par exemple, OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) active NCHAR remplacement littéral, alors que OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) désactive.

[...] Il est à noter que, lorsque l' NCHAR littérale de remplacement est activée, OCIStmtPrepare et OCIStmtPrepare2transformera N' les littéraux U' littérales dans le texte SQL et stocker le texte SQL résultant dans la poignée de déclaration. Ainsi, si l'application utilise OCI_ATTR_STATEMENT pour récupérer le texte SQL à partir du OCI poignée de déclaration, le texte SQL retournera U' au lieu de N' comme spécifié dans le texte original.


(3) la Réponse à votre question

du point de vue des types de données, il n'y a pas de différence entre les deux requêtes fourni

11
répondu Hadi 2018-01-10 00:01:39

lors de l'utilisation de N' nous indiquons que le type de données donné est NCHAR ou NVARCHAR.

U' est utilisé pour désigner unicode

5
répondu apomene 2018-01-03 11:32:03
  • N'string' retourne stringNCHAR type.

  • U'string' renvoie aussi NCHAR tapez, cependant il fait un traitement supplémentaire à la string: il remplace \\ et \xxxx avec point de code Unicode U+xxxx, où xxxx 4 chiffres hexadécimaux. Ceci est similaire à UNISTR('string'), la différence est que celle-ci retourne NVARCHAR2.

U' les littérales sont utiles quand vous voulez avoir une chaîne de caractères Unicode indépendante de l'encodage et des paramètres NLS.

Exemple:

select n'\€', u'\ac', n'\ac' from dual;

N'\€' U'\AC' N'\AC'
----- ---------- ----------
\€    \€         \ac
4
répondu mik 2018-03-23 13:47:55