Wat is het verschil tussen varchar en varchar2 in Oracle?

Wat is het verschil tussen varchar en varchar2?


Antwoord 1, autoriteit 100%

Voorlopig zijn het synoniemen.

VARCHARis gereserveerd door Oracleom in de toekomst onderscheid te maken tussen NULLen lege tekenreeks, als ANSI-standaard voorschrijft.

VARCHAR2maakt geen onderscheid tussen een NULLen een lege tekenreeks, en zal dat ook nooit doen.

Als u erop vertrouwt dat een lege tekenreeks en NULLhetzelfde zijn, moet u VARCHAR2gebruiken.


Antwoord 2, autoriteit 12%

Momenteel gedraagt VARCHAR zich precies hetzelfde als VARCHAR2. Het type VARCHARmag echter niet worden gebruikt omdat het is gereserveerd voor toekomstig gebruik.

Genomen van: Verschil tussen CHAR, VARCHAR, VARCHAR2


Antwoord 3, autoriteit 10%

Genomen uit de nieuwste stabiele Oracle-productieversie 12.2:
Gegevenstypen

Het belangrijkste verschil is dat VARCHAR2een intern gegevenstypeis en VARCHAReen extern gegevenstypeis. We moeten dus het verschil begrijpen tussen een intern en extern gegevenstype…

Binnen een database worden waarden opgeslagen in kolommen in tabellen. Intern vertegenwoordigt Oracle data in bepaalde formaten die bekend staan als interne datatypes.

Over het algemeen werken OCI-toepassingen (Oracle Call Interface) niet met interne gegevenstyperepresentaties van gegevens, maar met gegevenstypen in de hosttaal die vooraf zijn gedefinieerd door de taal waarin ze zijn geschreven. Wanneer gegevens worden overgedragen tussen een OCI-clienttoepassing en een databasetabel, converteren de OCI-bibliotheken de gegevens tussen interne gegevenstypen en externe gegevenstypen.

Externe typen bieden een gemak voor de programmeur door het mogelijk te maken om met hosttaaltypen te werken in plaats van eigen dataformaten. OCI kan een breed scala aan gegevenstypeconversies uitvoeren bij het overbrengen van gegevens tussen een Oracle-database en een OCI-toepassing. Er zijn meer externe OCI-gegevenstypen dan interne gegevenstypen van Oracle.

Het gegevenstype VARCHAR2is een tekenreeks van variabele lengte met een maximale lengte van 4000 bytes. Als de parameter max_string_size init.ora standaard is, kan de maximale lengte van een VARCHAR24000 bytes zijn. Als de init.ora parameter max_string_size = extended, kan de maximale lengte van een VARCHAR232767 bytes zijn

Het gegevenstype VARCHARslaat tekenreeksen van verschillende lengtes op. De eerste 2 bytes bevatten de lengte van de tekenreeks en de resterende bytes bevatten de tekenreeks. De opgegeven lengte van de tekenreeks in een bind- of een definitieaanroep moet de twee lengtebytes bevatten, dus de grootste VARCHAR-tekenreeks die kan worden ontvangen of verzonden is 65533 bytes lang, niet 65535.

Een snelle test in een 12.2 database suggereert dat Oracle als een intern gegevenstypeeen VARCHARnog steeds behandelt als een pseudotypevoor VARCHAR2. Het is GEEN SYNONYMwat een echt objecttype is in 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)

Er zijn ook enkele implicaties van VARCHARvoor ProC/C++ Precompiler-opties. Voor programmeurs die geïnteresseerd zijn, de link is op: Pro*C/ Handleiding voor C++-programmeurs


Antwoord 4

Na wat experimenteren (zie hieronder), kan ik bevestigen dat er vanaf september 2017 niets is veranderd met betrekking tot de functionaliteit die wordt beschreven in het geaccepteerde antwoord:-

  1. Rextester-demo voor Oracle 11g:
    Lege tekenreeksen worden ingevoegd als NULLs voor beide VARCHAR
    en VARCHAR2.
  2. LiveSQL-demo voor Oracle 12c:Zelfde resultaten.

De historische reden voor deze twee zoekwoorden wordt goed uitgelegd in een antwoord op een andere vraag.


Antwoord 5

  1. VARCHAR kan tot 2000 bytes aan tekens opslaan, terwijl VARCHAR2 tot 4000 bytes aan tekens kan opslaan.

  2. Als we het datatype VARCHAR declareren, zal het ruimte innemen voor NULL-waarden. In het geval van het VARCHAR2-gegevenstype neemt het geen ruimte in beslag voor NULL-waarden. bijv.,

    name varchar(10)

zal 6 bytes geheugen reserveren, zelfs als de naam ‘Ravi__’ is, terwijl

name varchar2(10) 

zal ruimte reserveren op basis van de lengte van de invoerreeks. bijv. 4 bytes geheugen voor ‘Ravi__’.

Hier staat _ voor NULL.

OPMERKING: varchar reserveert ruimte voor null-waarden en varchar2 reserveert geen ruimte voor null-waarden.


Antwoord 6

Momenteel zijn ze hetzelfde. maar eerder

  1. Ergens op het net las ik dat,

VARCHARis gereserveerd door Oracle om in de toekomst onderscheid te maken tussen NULLen lege string, zoals de ANSI-standaard voorschrijft.

VARCHAR2maakt geen onderscheid tussen een NULLen een lege string, en zal dat ook nooit doen.

  1. Ook,

Emp_name varchar(10)– als u een waarde van minder dan 10 cijfers invoert, kan de resterende ruimte niet worden verwijderd. het gebruikte in totaal 10 spaties.

Emp_name varchar2(10)– als u een waarde van minder dan 10 cijfers invoert, wordt de resterende ruimte automatisch verwijderd

Other episodes