Yanıtlar:
Şimdilik, eşanlamlılar.
VARCHAR
, standart reçeteler olarak, gelecekte ve boş karakter dizisi arasındaki Oracle
ayrımı desteklemek için ayrılmıştır .NULL
ANSI
VARCHAR2
NULL
boş ve boş bir dize arasında ayrım yapmaz ve asla olmaz.
Boş dizeye güveniyorsanız ve NULL
aynı şeyse, kullanmalısınız VARCHAR2
.
VARCHAR2
şu anda VARCHAR
olması gerektiği gibi davranan bir tür olmaması. Aslında, VARCHAR
düzgün bir şekilde uygulanıncaya kadar hiç kullanmamalısınız .
where x is NULL
gelen döner farklı sonuçlar where x = ''
vermez değil anlamına NULL
ve ''
herhangi bir şekilde farklı içindedir. Farklı davranış, =
operatöre bağlıdır.
Şu anda VARCHAR, VARCHAR2 ile tamamen aynı şekilde davranmaktadır. Ancak bu tür VARCHAR
, ileride kullanılmak üzere ayrıldığı için kullanılmamalıdır.
Alındığı kaynak: CHAR, VARCHAR, VARCHAR2 Arasındaki Fark
VARCHAR
kullanılmamalıdır. Düzenledim
En son kararlı Oracle üretim sürümü 12.2'den alınmıştır: Veri Türleri
En büyük fark, VARCHAR2
bir iç veri tipi ve VARCHAR
bir dış veri tipi olmasıdır . Bu nedenle, dahili ve harici bir veri türü arasındaki farkı anlamamız gerekir ...
Bir veritabanının içindeki değerler tablolardaki sütunlarda saklanır. Dahili olarak Oracle, dahili veri türleri olarak bilinen belirli formatlardaki verileri temsil eder .
Genel olarak, OCI (Oracle Call Interface) uygulamaları, verilerin dahili veri türü gösterimleriyle değil, yazıldıkları dil tarafından önceden tanımlanan ana bilgisayar dili veri türleriyle çalışır. Bir OCI istemci uygulaması ile bir veritabanı tablosu arasında veri aktarıldığında, OCI kitaplıkları verileri dahili veri türleri ve harici veri türleri arasında dönüştürür.
Harici türler, tescilli veri formatları yerine ana bilgisayar dili türleriyle çalışmayı mümkün kılarak programcıya kolaylık sağlar. OCI, bir Oracle veritabanı ve OCI uygulaması arasında veri aktarırken çok çeşitli veri türü dönüşümleri gerçekleştirebilir. Oracle dahili veri türlerinden daha fazla OCI harici veri türü vardır.
VARCHAR2
Veri tipi 4000 bayt uzunluğu ile karakterlerin değişken uzunlukta dizedir. İnit.ora parametresi max_string_size varsayılansa, a'nın maksimum uzunluğu VARCHAR2
4000 bayt olabilir. İnit.ora parametresi max_string_size = uzatılmışsa, a'nın maksimum uzunluğu VARCHAR2
32767 bayt olabilir
VARCHAR
Uzunluğu değişen veri türü depolar karakter dizeleri. İlk 2 bayt karakter dizesinin uzunluğunu ve kalan bayt dizeyi içerir. VARCHAR
Bağlama veya tanımlı çağrıdaki dizenin belirtilen uzunluğu iki uzunluk baytı içermelidir, bu nedenle alınabilen veya gönderilebilen en büyük dize 65535 bayt uzunluğundadır, 65535 değil.
Bir 12.2 veritabanında hızlı bir testi olarak düşündürmektedir dahili veri türü Oracle hala davranır VARCHAR
bir şekilde psödotipinde için VARCHAR2
. SYNONYM
Oracle'da gerçek bir nesne türü DEĞİLDİR .
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)
VARCHAR
ProC / C ++ Precompiler seçeneklerinin bazı etkileri de vardır . İlgilenen programcılar için bağlantı şuradadır: Pro * C / C ++ Programcı Kılavuzu
Bazı deneylerden sonra (aşağıya bakın), Eylül 2017 itibariyle, kabul edilen cevapta açıklanan işlevsellik ile ilgili hiçbir şeyin değişmediğini doğrulayabilirim :
NULL
hemVARCHAR
veiçin solarak eklenirVARCHAR2
.Bu iki anahtar kelimenin tarihsel nedeni, farklı bir sorunun cevabında iyi açıklanmıştır .
VARCHAR 2000 bayta kadar karakter saklayabilirken, VARCHAR2 4000 bayta kadar karakter depolayabilir.
Veri tipini VARCHAR olarak ilan edersek NULL değerleri için yer kaplar. VARCHAR2 veri türü durumunda, NULL değerler için yer kaplamaz. Örneğin,
name varchar(10)
adı 'Ravi__' olsa bile 6 bayt bellek ayıracak
name varchar2(10)
giriş dizesinin uzunluğuna göre yer ayıracaktır. örneğin, 'Ravi__' için 4 bayt bellek.
Burada _, NULL değerini temsil eder.
NOT: varchar null değerler için yer ayırır ve varchar2 null değerler için yer ayırmaz.
VARCHAR
ile CHAR
.
Şu anda aynılar. ama önceden
VARCHAR
, NULL
ANSI standardında öngörüldüğü üzere, Oracle tarafından gelecekte dize ve boş dize arasındaki farkı desteklemek üzere ayrılmıştır .
VARCHAR2
NULL
boş ve boş bir dize arasında ayrım yapmaz ve asla olmaz.
Emp_name varchar(10)
- 10 basamaktan küçük bir değer girerseniz, kalan boşluk silinemez. toplamda 10 boşluk kullandı.
Emp_name varchar2(10)
- 10 basamaktan küçük bir değer girerseniz kalan alan otomatik olarak silinir
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;