Yanıtlar:
Şimdilik, eşanlamlılar.
VARCHAR, standart reçeteler olarak, gelecekte ve boş karakter dizisi arasındaki Oracleayrımı desteklemek için ayrılmıştır .NULLANSI
VARCHAR2NULLboş ve boş bir dize arasında ayrım yapmaz ve asla olmaz.
Boş dizeye güveniyorsanız ve NULLaynı şeyse, kullanmalısınız VARCHAR2.
VARCHAR2şu anda VARCHARolması gerektiği gibi davranan bir tür olmaması. Aslında, VARCHARdüzgün bir şekilde uygulanıncaya kadar hiç kullanmamalısınız .
where x is NULLgelen döner farklı sonuçlar where x = ''vermez değil anlamına NULLve ''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
VARCHARkullanı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, VARCHAR2bir iç veri tipi ve VARCHARbir 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.
VARCHAR2Veri 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 VARCHAR24000 bayt olabilir. İnit.ora parametresi max_string_size = uzatılmışsa, a'nın maksimum uzunluğu VARCHAR232767 bayt olabilir
VARCHARUzunluğu değişen veri türü depolar karakter dizeleri. İlk 2 bayt karakter dizesinin uzunluğunu ve kalan bayt dizeyi içerir. VARCHARBağ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 VARCHARbir şekilde psödotipinde için VARCHAR2. SYNONYMOracle'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)
VARCHARProC / 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 :
NULLhemVARCHAR
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.
VARCHARile CHAR.
Şu anda aynılar. ama önceden
VARCHAR, NULLANSI standardında öngörüldüğü üzere, Oracle tarafından gelecekte dize ve boş dize arasındaki farkı desteklemek üzere ayrılmıştır .
VARCHAR2NULLboş 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;