Avoir une base de données Oracle Unicode (jeu de caractères multi-octets) avec NLS_LENGTH_SEMANTICS = BYTE semble être une catastrophe en attente de se produire. Dans la plupart des applications, la validation des champs vérifie uniquement que le nombre de caractères est compris dans les limites, et non la longueur de la séquence d'octets dans le schéma de codage de caractères par défaut de la base de données! Si vous avez une base de données Unicode, y a-t-il une bonne raison d'utiliser NLS_LENGTH_SEMANTICS = BYTE plutôt que CHAR?Y at-il des situations dans lesquelles vous utiliseriez NLS_LENGTH_SEMANTICS = BYTE sur une base de données Unicode?
Répondre
C'est juste un héritage, je pense. Il y a beaucoup d'anciennes applications qui ont toujours travaillé sur des octets et peuvent devenir confuses si cela change. Quelque chose où les chaînes d'octets et les index vont à une application externe/langue qui fonctionne en octets va mal tourner de manière étrange et imprévisible si les index sont redéfinis en dessous.
Je n'utiliserais pas la sémantique des octets pour une nouvelle application et je suis d'accord que ce n'est pas une bonne valeur par défaut. Mais j'espère que vous utilisez NVARCHAR, ce qui évite le problème (car il est toujours basé sur des caractères).
Plus précisément, je sais que Crystal Management Server sur Oracle (pour la base de données de configuration) nécessite NLS_LENGTH_SEMANTICS = BYTE . Il lance un ajustement jusqu'à ce que vous arriviez au SP2. Le travail autour est un déclencheur d'ouverture de session appliqué à l'utilisateur de cristal. – REW
La sémantique des octets est une catastrophe; eu peu par la semaine dernière. Mais la sémantique CHAR résout seulement tellement. "Indépendamment de la longueur maximale en caractères, la longueur des données VARCHAR2 ne peut pas dépasser 4000 ** octets **." (Emphase ajoutée) Pour des chaînes suffisamment grandes, vous pouvez atteindre l'espace maximum autorisé avant d'atteindre la limite de taille spécifiée dans la colonne. Extrait de: http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements001.htm#i45694 –