Ce qui signifie exactement que la taille d'un VARCHAR2 champ est déclaré que 1 OCTET? (dans une DB Oracle)
Je ne suis pas en database
et j'ai le texte suivant doute.
Je sais que je peux déclarer une varchar2
champ en utilisant le numéro du char qu'il peut contenir.
Mais dans un Oracle
base de données sur laquelle je travaille, j'ai trouvé qu'un champ (nommé en PDF) est défini comme:
VARCHAR2(1 BYTE)
Ce que cela signifie exactement? Combien de characted il contient?
Un autre doute: quelle est exactement la différence entre un VARCHAR
champ et un VARCHAR2
champ?
Tnx
double possible de Quelle est la différence entre varchar et varchar2?
et en double possible de stackoverflow.com/questions/81448/...
voir aussi NLS_LENGTH_SEMANTICS paramètre: asktom.oracle.com/pls/asktom/...
Je pense que dans votre cas, la différence entre BYTE et CHAR est dénuée de sens. Oracle ne prend pas en charge le type Booléen, donc il est généralement mis en œuvre comme
et en double possible de stackoverflow.com/questions/81448/...
voir aussi NLS_LENGTH_SEMANTICS paramètre: asktom.oracle.com/pls/asktom/...
Je pense que dans votre cas, la différence entre BYTE et CHAR est dénuée de sens. Oracle ne prend pas en charge le type Booléen, donc il est généralement mis en œuvre comme
CHAR(1)
. Ayant de longueur variable chaîne de max. longueur de un octet est un non-sens.OriginalL'auteur AndreaNobili | 2015-06-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez déclarer les colonnes de variables qu'varchar2(n CHEVALIER) et varchar2(n octets).
n CHAR-dire que la variable va contenir n caractères. Dans les multi-byte character sets de ne pas toujours savoir combien d'octets que vous souhaitez stocker, mais vous ne voulez garantir le stockage d'un certain nombre de personnages.
n octets signifie simplement le nombre d'octets que vous souhaitez stocker.
varchar est obsolète. Ne l'utilisez pas.
Quelle est la différence entre varchar et varchar2?
Je trouve étrange que lors de la déclaration d'un type de données pour stocker les caractères de texte, vous avez la possibilité de spécifier le nombre d'octets de stockage. Le stockage sous-jacent de la taille doit être géré de manière transparente par le moteur de base de données basé sur le codage du texte. Si, par exemple, en tant qu'utilisateur j'ai besoin de stocker un nombre X de caractères de texte en utilisant l'encodage UTF-8, un moteur de base de données doit comprendre en interne la capacité de stockage est nécessaire pour cela. De permettre à un utilisateur de définir qui est l'ouverture de la porte à bien des problèmes.
Il y a un paramètre de base de données NLS_LENGTH_SEMANTICS qui prend soin de cela.
OriginalL'auteur Rene
Je ne sais pas la différence exacte entre
VARCHAR
etVARCHAR2
mais la réponse est simple: Ne pas utiliserVARCHAR
, utilisez uniquementVARCHAR2
.Si votre base de données s'exécute sur un single-byte character set (par exemple
US7ASCII
,WE8MSWIN1252
ouWE8ISO8859P1
), il ne fait aucune différence si vous utilisezVARCHAR2(x BYTE)
ouVARCHAR2(x CHAR)
.Il ne fait qu'une différence lors de votre base de données s'exécute sur multi-byte character set (par exemple
AL32UTF8
ouAL16UTF16
). Vous pouvez simplement le voir dans cet exemple:VARCHAR2(1 CHAR)
signifie que vous pouvez stocker jusqu'à 1 caractère, peu importe combien d'octets. Dans le cas de l'Unicode d'un caractère peut occuper jusqu'à 4 octets.VARCHAR2(1 BYTE)
signifie que vous pouvez stocker un caractère qui occupe max. 1 octet.Si vous ne spécifiez pas, soit
BYTE
ouCHAR
alors la valeur par défaut est prise à partir deNLS_LENGTH_SEMANTICS
paramètre session.Sauf si vous avez Oracle 12c où vous pouvez définir
MAX_STRING_SIZE=EXTENDED
la limite estVARCHAR2(4000 CHAR)
Cependant,
VARCHAR2(4000 CHAR)
ne signifie pas que vous êtes garanti de stocker jusqu'à 4000 caractères. La limite est encore 4000 octets, donc dans le pire des cas, vous pouvez stocker jusqu'à 1000 caractères dans ce champ.Voir cet exemple (
€
en UTF-8 occupe 3 octets):Voir aussi Des exemples et des limites de l'OCTET et le CHAR de la sémantique d'utilisation (NLS_LENGTH_SEMANTICS) (Doc ID 144808.1)
OriginalL'auteur Wernfried Domscheit
De réponse de la première question:
Oui, cela signifie que 1 octet alloue pour 1 caractère. Regardez cet exemple
Et pour répondre à ta prochaine:
La différence entre
varchar2
etvarchar
:VARCHAR
peut stocker jusqu'à2000 bytes
de personnages toutVARCHAR2
peut stocker jusqu'à4000 bytes
de caractères.VARCHAR
puis il va occuper l'espace pourNULL values
, En cas deVARCHAR2
type de données, il seranot
occuper tout l'espace.OriginalL'auteur Darshan Lila
cela signifie UNIQUEMENT un octet sera alloué par le caractère - si vous êtes en utilisant le multi-octets jeux de caractères, votre 1 caractères ne correspondent pas à
si vous savez que vous devez avoir au moins assez de place pour 1 caractère, ne pas utiliser l'OCTET de syntaxe, sauf si vous savez exactement combien d'espace vous aurez besoin de stocker des octets
en cas de doute, utilisez VARCHAR2(1 CHAR)
même chose répondu ici Différence entre BYTE et CHAR dans la colonne type de données
Aussi, dans 12c le max pour varchar2 est maintenant de 32 ko, pas 4000. Si vous avez besoin de plus que cela, utiliser CLOB
dans Oracle, ne pas utiliser de type VARCHAR
SYSTEM
niveau en faisantMAX_STRING_SIZE
àEXTENDED
, sinon par défaut il serait4000
.Merci pour les aider +Lalit
Cela marche aussi pour les multi-octets les jeux, aussi longtemps que le personnage utilise un seul octet, par exemple, jusqu'à
CHR(127)
en UTF-8sûr que si le multi = 1, cela fonctionnera
OriginalL'auteur thatjeffsmith
Maximum de l'allocation de mémoire en SQL.
Maintenant, quand nous déclarons
VARCHAR2(1 BYTE)
ouVARCHAR2(1)
. Cela signifie, il peut stocker jusqu'à 1 caractère.Lire plus
Dans Oracle
12c
, vous pouvez étendre la VARCHAR2 pour32767
pour SQL type de données. Vous devez définirMAX_STRING_SIZE
àEXTENDED
.OCTET est différent de CHAR, sauf pour de simples jeux de caractères.
OriginalL'auteur Ravi