Qual è la differenza tra i tipi di dati Oracle VARCHAR e VARCHAR2?


Risposte:


26

Sembra che Oracle un tempo avesse in programma di dare una definizione diversa a VARCHAR rispetto a VARCHAR2 . Lo ha detto ai clienti e sconsiglia di usare VARCHAR . Qualunque fossero i loro piani, a partire dall'11.2.0.2 VARCHAR è identico a VARCHAR2 . Ecco cosa dice SQL Language Reference 11g Release 2 :

Non utilizzare il tipo di dati VARCHAR. Utilizzare invece il tipo di dati VARCHAR2. Sebbene il tipo di dati VARCHAR sia attualmente sinonimo di VARCHAR2, il tipo di dati VARCHAR è pianificato per essere ridefinito come tipo di dati separato utilizzato per stringhe di caratteri a lunghezza variabile rispetto a semantiche di confronto diverse.

La Guida per l'utente e riferimento PL / SQL 10g Release 2 spiega come:

Attualmente, VARCHAR è sinonimo di VARCHAR2. Tuttavia, nelle versioni future di PL / SQL, per adattarsi agli standard SQL emergenti, VARCHAR potrebbe diventare un tipo di dati separato con una semantica di confronto diversa. È una buona idea usare VARCHAR2 anziché VARCHAR.

Il documento Database Concepts 10g Release 2 dice la stessa cosa in termini più forti:

Il tipo di dati VARCHAR è sinonimo del tipo di dati VARCHAR2. Per evitare possibili cambiamenti nel comportamento, utilizzare sempre il tipo di dati VARCHAR2 per memorizzare stringhe di caratteri di lunghezza variabile.

La documentazione Oracle 9.2 e 8.1.7 dice sostanzialmente la stessa cosa, quindi anche se Oracle scoraggia continuamente l'uso di VARCHAR , finora non hanno fatto nulla per cambiare la sua parità con VARCHAR2 .


Ricordo varchar2 in Oracle 8i, ma non sono sicuro che fosse lo stesso varchar allora.
bernd_k,


Vi sono indicazioni che ad un certo punto prima dell'8i la definizione potrebbe essere stata diversa.
Leigh Riffel,

varcharPrima pensavo che ci fosse un limite di lunghezza diverso prima della versione 8, ma non riesco a trovare nulla di affidabile per sostenerlo e ora mi chiedo se è solo un mito.
Jack Douglas,

@Jack Douglas - Non riesco a trovare nulla nella documentazione di Oracle 7 al riguardo. Da docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Oracle 7 Server >> Concetti relativi al server >> Oracle Datatypes (impossibile collegarlo direttamente ad esso) dice praticamente la stessa cosa di seguito versioni. In un'altra sezione della documentazione della versione 7 si dice che nella versione 6 Varchar e Varchar2 erano sinonimi di char.
Leigh Riffel,

25

Attualmente, i due sono sinonimi.

VARCHAR è un tipo di dati standard ANSI ma l'implementazione di Oracle del tipo di dati VARCHAR viola lo standard ANSI considerando che la stringa vuota è NULL (l'implementazione di Oracle precede lo standard ANSI). Come sottolineato da Leigh, Oracle ha affermato che la semantica del tipo di dati VARCHAR potrebbe cambiare in futuro rispetto al modo in cui viene trattata la stringa vuota. Se e quando ciò accade, la semantica del tipo di dati VARCHAR2 rimarrà la stessa. L'uso del tipo di dati VARCHAR2 è più sicuro perché non devi preoccuparti che una versione futura di Oracle interromperà il tuo codice rendendo le stringhe vuote non più considerate NULL.


3

Perché nello standard SQL originale un VARCHAR era di 255 caratteri, e Oracle stava almeno cercando di soddisfare gli standard in quei giorni.


Ciò dà speranza di vedere Oracle varchar3 (max) in alcuni anni.
bernd_k,

Il server SQL non ha avuto problemi nell'aumentare la lunghezza consentita da 255 a 8000 (e ora anche al massimo). Perché Oracle aveva bisogno di un tipo di dati diverso.
bernd_k,

1
Non è necessario per a varchar(max), basta usare aCLOB
a_horse_with_no_name il

3
CLOB ha una semantica diversa da VARCHAR2
Gaius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.