Question

Quelle est la différence entre varchar et varchar2?

Était-ce utile?

La solution

Pour l'instant, ils sont synonymes.

VARCHAR est réservé par Oracle pour soutenir la distinction entre NULL et chaîne vide à l'avenir, en tant que norme de ANSI prescrit.

VARCHAR2 ne distingue pas entre un NULL et une chaîne vide, et ne le sera jamais.

Si vous comptez sur une chaîne vide et NULL être la même chose, vous devez utiliser VARCHAR2.

Autres conseils

À l'heure actuelle VARCHAR se comporte exactement les mêmes que VARCHAR2. Cependant, le VARCHAR type ne doit pas être utilisé comme il est réservé pour un usage futur.

Tiré de: Différence entre CHAR, VARCHAR, VARCHAR2

Tiré de la dernière version stable de la production Oracle 12.2: Types de données

La différence majeure est que VARCHAR2 est un type de données interne et VARCHAR est un type de données externe . Nous avons donc besoin de comprendre la différence entre un type de données internes et externes ...

Dans une base de données, les valeurs sont stockées dans des colonnes dans les tableaux. En interne, Oracle représente des 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 langage hôte qui sont prédéfinies par la langue dans laquelle ils sont écrits. Lorsque les données sont transférées entre une application client OCI et une table de base de données, les bibliothèques du BEC convertissent les données entre les types de données internes et types de données externes.

types externes offrent une commodité pour le programmeur en permettant de travailler avec les types de langage hôte au lieu des formats de données propriétaires. BEC 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 plusieurs types de données externes BEC que les types de données internes Oracle.

Le type de données VARCHAR2 est une chaîne de longueur variable de caractères avec une longueur maximale de 4000 octets. Si le paramètre init.ora max_string_size est par défaut, la longueur maximale d'un VARCHAR2 peut être 4000 octets. Si le paramètre init.ora max_string_size = étendue, la durée maximale d'un VARCHAR2 peut être 32767 octets

Les magasins de type données VARCHAR 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 de la chaîne spécifiée dans une liaison ou un appel définir doivent inclure les deux octets de longueur, de sorte que la plus grande chaîne de VARCHAR qui peut être reçu ou envoyé est 65533 octets, et non pas 65.535.

Un test rapide dans une base de données 12.2 suggère que comme type de données interne , Oracle traite encore VARCHAR comme pseudotype pour VARCHAR2. Il est pas un SYNONYM qui est un type d'objet réel dans Oracle.

SQL> select substr(banner,1,80) from v$version where rownum=1;
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production    

SQL> create table test (my_char varchar(20));
Table created.

SQL> desc test
Name                 Null?    Type
MY_CHAR                       VARCHAR2(20)

Il y a aussi des implications de VARCHAR pour les options ProC / C ++ precompiler. Pour les programmeurs qui sont intéressés, le lien est à l'adresse: Pro * C / Guide de programmeur C ++

Après quelques essais (voir ci-dessous), je peux confirmer que à partir de Septembre 2017, rien n'a changé en ce qui concerne les fonctionnalités décrites dans la réponse acceptée : -

  1. Rextester démo pour Oracle 11g: Les chaînes vides sont insérés comme NULLs pour les deux VARCHAR et VARCHAR2.
  2. LiveSQL démo pour 12c Oracle: Les mêmes résultats.

La raison historique pour ces deux mots-clés est bien expliqué dans une réponse à une question différente.

À l'heure actuelle, ils sont les mêmes. mais auparavant

  1. Quelque part sur le net, je lis que,

VARCHAR est réservé par Oracle pour soutenir la distinction entre NULL et chaîne vide à l'avenir, comme prescrit norme ANSI.

VARCHAR2 ne distingue pas entre un NULL et une chaîne vide, et ne le sera jamais.

  1. En outre,

Emp_name varchar(10) - si vous entrez valeur inférieure à 10 chiffres, puis l'espace restant ne peut pas être supprimé. il utilise au total 10 espaces.

Emp_name varchar2(10) - si vous entrez valeur inférieure à 10 chiffres, puis l'espace restant est automatiquement supprimé

  1. VARCHAR peut stocker jusqu'à 2000 octets de caractères tout en VARCHAR2 peut stocker jusqu'à 4000 octets de caractères.

  2. Si nous déclarons que VARCHAR alors datatype il occupera l'espace pour les valeurs NULL. Dans le cas de VARCHAR2 type de données, il ne sera pas occuper un espace pour les valeurs NULL. par ex.,

    name varchar(10)

réservera 6 octets de mémoire, même si le nom est « Ravi__ », alors que

name varchar2(10) 

réservera 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.

NOTE:. Varchar réservera un espace pour les valeurs nulles et varchar2 ne se réservera pas d'espace pour les valeurs NULL

différence:

  • VARCHAR peut stocker jusqu'à 2000 octets de caractères tout en VARCHAR2 peut stocker jusqu'à 4000 octets de caractères.
  • Si nous déclarons que VARCHAR alors datatype il occupera l'espace pour les valeurs de NULL, en cas de VARCHAR2 il ne sera pas datatype occuper tout l'espace.

similarité:

  • VARCHAR et VARCHAR2 les deux sont de caractère variable.

source

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top