Oracle'ın VARCHAR ve VARCHAR2 veri türleri arasındaki fark nedir?


Yanıtlar:


26

Oracle tek seferde farklı bir tanım vermek planları vardı gibi görünüyor VARCHAR daha VARCHAR2 . Müşterilere bunu anlattı ve VARCHAR'ın kullanılmasını öneriyor . Planları ne olursa olsun, 11.2.0.2 itibariyle VARCHAR , VARCHAR2 ile aynıdır . İşte budur SQL Dili Reference 11g Release 2 diyor ki:

VARCHAR veri türünü kullanmayın. Bunun yerine VARCHAR2 veri türünü kullanın. VARCHAR veri türü şu anda VARCHAR2 ile eşanlamlı olmasına rağmen, VARCHAR veri türünün, farklı karşılaştırma semantiklerine kıyasla değişken uzunlukta karakter dizileri için kullanılan ayrı bir veri türü olarak yeniden tanımlanması planlanmaktadır.

PL / SQL Kullanıcı Kılavuzu ve Başvuru 10g Release 2 koyar bunu bu şekilde:

Şu anda VARCHAR, VARCHAR2 ile eş anlamlıdır. Bununla birlikte, PL / SQL'in gelecekteki sürümlerinde, ortaya çıkan SQL standartlarını karşılamak için VARCHAR, farklı karşılaştırma semantiğine sahip ayrı bir veri türü haline gelebilir. VARCHAR yerine VARCHAR2 kullanmak iyi bir fikirdir.

Veritabanı Kavramlar 10g Release 2 belge daha güçlü açısından aynı şeyi söylüyor:

VARCHAR veri tipi, VARCHAR2 veri tipiyle eşanlamlıdır. Davranıştaki olası değişiklikleri önlemek için, her zaman VARCHAR2 veri türünü kullanarak değişken uzunlukta karakter dizelerini saklayın.

Oracle 9.2 ve 8.1.7 belgeleri temelde aynı şeyi söylüyor, bu nedenle Oracle sürekli olarak VARCHAR kullanımını engellemese de , şu ana kadar VARCHAR2 ile paritesini değiştirmek için hiçbir şey yapmadılar .


Oracle 8i'de varchar2'yi hatırlıyorum, ancak o zaman aynı bir varchar olup olmadığından emin değilim.
bernd_k


8i'den önceki bir noktada tanımın farklı olabileceğine dair göstergeler vardır.
Leigh Riffel

varcharSürüm 8'den önce farklı bir uzunluk sınırı olduğunu düşünürdüm , ancak bunu desteklemek için saygın bir şey bulamıyorum ve şimdi bunun sadece bir efsane olup olmadığını merak ediyorum.
Jack Douglas

@Jack Douglas - Oracle 7 belgelerinde bununla ilgili hiçbir şey bulamıyorum. Gönderen docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Oracle 7 Sunucusu >> Sunucu Kavramları >> Oracle Veritipleri (doğrudan ona bağlantı olamaz) sonradan olarak hemen hemen aynı şeyi söylüyor sürümleri. Sürüm 7 belgelerinin başka bir bölümünde, sürüm 6'da Varchar ve Varchar2'nin char ile eşanlamlılar olduğu belirtilmektedir.
Leigh Riffel

25

Şu anda, ikisi de eşanlamlıdır.

VARCHAR bir ANSI standart veri türüdür, ancak Oracle'ın VARCHAR veri türünü uygulaması, boş dizeyi NULL olarak değerlendirerek ANSI standardını ihlal eder (Oracle uygulaması ANSI standardından önce gelir). Leigh'in belirttiği gibi Oracle, VARCHAR veri türünün anlambiliminin gelecekte boş dizgenin nasıl ele alındığına bağlı olarak değişebileceğini belirtti. Bu olduğunda ve olduğunda, VARCHAR2 veri türünün semantiği aynı kalacaktır. VARCHAR2 veri türünü kullanmak daha güvenlidir çünkü Oracle'ın gelecekteki bazı sürümlerinin boş dizelerin artık NULL olarak değerlendirilmemesine neden olarak kodunuzu kıracağından endişelenmenize gerek yoktur.


3

Çünkü orijinal SQL standardında bir VARCHAR 255 karakterdi ve Oracle'ın en azından o günlerde standartlara uyumunda bir bıçak vardı.


Bu, Oracle varchar3'ü (maks.) Bazı yıllarda görmeyi umuyor.
bernd_k

Sql-server, izin verilen uzunluğu 255'ten 8000'e (ve şimdi de maksimuma) yükseltmekte sorun yaşamıyordu. Oracle'ın neden farklı bir veri tipine ihtiyacı vardı?
bernd_k

1
Bir gerek yoktur varchar(max), sadece kullanınCLOB
a_horse_with_no_name

3
CLOB, VARCHAR2
Gaius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.