Quelle est la différence entre varchar et varchar2?
oracle
sqldatatypes
hrishi
la source
la source
Réponses:
Pour l'instant, ce sont des synonymes.
VARCHAR
est réservé parOracle
pour prendre en charge la distinction entreNULL
les chaînes vides à l'avenir, commeANSI
le prescrit la norme.VARCHAR2
ne fait pas de distinction entre uneNULL
chaîne vide et ne le fera jamais.Si vous comptez sur une chaîne vide et
NULL
que c'est la même chose, vous devez utiliserVARCHAR2
.la source
VARCHAR2
dû au fait qu'il n'existe actuellement aucun type qui se comporte commeVARCHAR
il se doit. En fait, vous ne devriez pas utiliserVARCHAR
du tout jusqu'à ce qu'il soit correctement implémenté.where x is NULL
renvoie des résultats différentswhere x = ''
ne signifie pas celaNULL
et''
est en quelque sorte différent. Le comportement différent est dû à l'=
opérateur.Actuellement, VARCHAR se comporte exactement de la même manière que VARCHAR2. Cependant, le type
VARCHAR
ne doit pas être utilisé car il est réservé pour une utilisation future.Extrait de: Différence entre CHAR, VARCHAR, VARCHAR2
la source
VARCHAR
ne doit pas être utilisé. Je l'ai éditéExtrait de la dernière version de production Oracle stable 12.2: types de données
La principale différence est qu'il
VARCHAR2
s'agit d'un type de données interne et d'VARCHAR
un type de données externe . Nous devons donc comprendre la différence entre un type de données interne et externe ...Dans une base de données, les valeurs sont stockées dans des colonnes dans des tableaux. En interne, Oracle représente les données dans des formats particuliers appelés types de données internes .
En général, les applications OCI (Oracle Call Interface) ne fonctionnent pas avec des représentations de type de données internes de données, mais avec des types de données de langue hôte qui sont prédéfinis par la langue dans laquelle ils sont écrits. Lorsque des données sont transférées entre une application cliente OCI et une table de base de données, les bibliothèques OCI convertissent les données entre les types de données internes et les types de données externes.
Les types externes offrent une commodité au programmeur en permettant de travailler avec des types de langage hôte au lieu de formats de données propriétaires. OCI peut effectuer une large gamme de conversions de types de données lors du transfert de données entre une base de données Oracle et une application OCI. Il existe plus de types de données externes OCI que de types de données internes Oracle.
Le
VARCHAR2
type de données est une chaîne de caractères de longueur variable d'une longueur maximale de 4 000 octets. Si le paramètre init.ora max_string_size est par défaut, la longueur maximale de aVARCHAR2
peut être de 4000 octets. Si le paramètre init.ora max_string_size = extended, la longueur maximale de aVARCHAR2
peut être 32767 octetsLe
VARCHAR
type de données stocke des chaînes de caractères de longueur variable. Les 2 premiers octets contiennent la longueur de la chaîne de caractères et les octets restants contiennent la chaîne. La longueur spécifiée de la chaîne dans une liaison ou un appel de définition doit inclure les deux octets de longueur, de sorte que la plus grandeVARCHAR
chaîne pouvant être reçue ou envoyée est longue de 65 533 octets et non de 65 535.Un test rapide dans une base de données 12.2 suggère qu'en tant que type de données interne , Oracle traite toujours un
VARCHAR
comme un pseudotype pourVARCHAR2
. Ce n'est PAS unSYNONYM
type d'objet réel dans Oracle.Il existe également des implications
VARCHAR
pour les options du précompilateur ProC / C ++. Pour les programmeurs intéressés, le lien se trouve sur: Guide du programmeur Pro * C / C ++la source
VARCHAR
traite toujours'' == null
?Après quelques expérimentations (voir ci-dessous), je peux confirmer qu'à partir de septembre 2017, rien n'a changé en ce qui concerne les fonctionnalités décrites dans la réponse acceptée : -
NULL
s pourVARCHAR
etVARCHAR2
.La raison historique de ces deux mots clés est bien expliquée dans une réponse à une question différente .
la source
VARCHAR peut stocker jusqu'à 2000 octets de caractères tandis que VARCHAR2 peut stocker jusqu'à 4000 octets de caractères.
Si nous déclarons le type de données VARCHAR, il occupera de l'espace pour les valeurs NULL. Dans le cas du type de données VARCHAR2, il n'occupera aucun espace pour les valeurs NULL. par exemple,
name varchar(10)
réservera 6 octets de mémoire même si le nom est 'Ravi__', alors que
réservera de l'espace en fonction de la longueur de la chaîne d'entrée. par exemple, 4 octets de mémoire pour «Ravi__».
Ici, _ représente NULL.
REMARQUE: varchar réservera de l'espace pour les valeurs nulles et varchar2 ne réservera aucun espace pour les valeurs nulles.
la source
VARCHAR
à confusionCHAR
.Actuellement, ce sont les mêmes. mais auparavant
VARCHAR
est réservé par Oracle pour prendre en charge la distinction entreNULL
les chaînes vides à l'avenir, comme le prescrit la norme ANSI.VARCHAR2
ne fait pas de distinction entre uneNULL
chaîne vide et ne le fera jamais.Emp_name varchar(10)
- si vous entrez une valeur inférieure à 10 chiffres, l'espace restant ne peut pas être supprimé. il a utilisé un total de 10 espaces.Emp_name varchar2(10)
- si vous entrez une valeur inférieure à 10 chiffres, l'espace restant est automatiquement suppriméla source
create table deleteme_table(v varchar(10), v2 varchar2(10)); insert into deleteme_table (v, v2) values ('abc','abc'); select v, length(v), v2, length(v2) from deleteme_table;
VARCHAR est le synonyme de VARCHAR2. Cependant, vous ne devez pas utiliser VARCHAR car Oracle peut changer sa sémantique à l'avenir.
la source