Jawaban:
Adapun sekarang, mereka adalah sinonim.
VARCHAR
dicadangkan oleh Oracle
untuk mendukung perbedaan antara NULL
dan mengosongkan string di masa depan, seperti yang ANSI
ditentukan standar.
VARCHAR2
tidak membedakan antara NULL
string kosong dan, dan tidak akan pernah.
Jika Anda mengandalkan string kosong dan NULL
menjadi hal yang sama, Anda harus menggunakannya VARCHAR2
.
VARCHAR2
karena saat ini tidak ada tipe yang berperilaku seperti VARCHAR
seharusnya. Bahkan, Anda tidak boleh menggunakan VARCHAR
sama sekali sampai itu diterapkan dengan benar.
where x is NULL
hasil pengembalian yang berbeda dari where x = ''
yang tidak berarti bahwa NULL
dan ''
dengan cara apapun yang berbeda. Perilaku yang berbeda disebabkan oleh =
operator.
Saat ini VARCHAR berperilaku persis sama dengan VARCHAR2. Namun, jenis ini VARCHAR
tidak boleh digunakan karena dicadangkan untuk penggunaan di masa mendatang.
Diambil dari: Perbedaan Antara CHAR, VARCHAR, VARCHAR2
VARCHAR
tidak boleh digunakan. Saya mengeditnya
Diambil dari versi stabil terbaru produksi Oracle 12.2: Jenis Data
Perbedaan utama adalah bahwa itu VARCHAR2
adalah tipe data internal dan VARCHAR
merupakan tipe data eksternal . Jadi kita perlu memahami perbedaan antara tipe data internal dan eksternal ...
Di dalam database, nilai disimpan dalam kolom dalam tabel. Secara internal, Oracle merepresentasikan data dalam format tertentu yang dikenal sebagai tipe data internal .
Secara umum, aplikasi OCI (Oracle Call Interface) tidak bekerja dengan representasi tipe data data internal, tetapi dengan tipe data bahasa host yang telah ditentukan oleh bahasa di mana mereka ditulis. Ketika data ditransfer antara aplikasi klien OCI dan tabel database, perpustakaan OCI mengkonversi data antara tipe data internal dan tipe data eksternal.
Tipe eksternal memberikan kenyamanan bagi programmer dengan membuatnya mungkin untuk bekerja dengan tipe bahasa host alih-alih format data yang dipatenkan. OCI dapat melakukan berbagai konversi tipe data saat mentransfer data antara database Oracle dan aplikasi OCI. Ada lebih banyak tipe data eksternal OCI daripada tipe data internal Oracle.
The VARCHAR2
tipe data adalah string variabel-panjang karakter dengan panjang maksimal 4000 byte. Jika parameter init.ora max_string_size adalah default, panjang maksimum VARCHAR2
bisa 4000 byte. Jika parameter init.ora max_string_size = diperluas, panjang maksimum VARCHAR2
bisa 32767 byte
The VARCHAR
string tipe data toko karakter dari berbagai panjang. 2 byte pertama berisi panjang string karakter, dan byte lainnya berisi string. Panjang string yang ditentukan dalam ikatan atau panggilan define harus menyertakan dua byte panjang, sehingga VARCHAR
string terbesar yang dapat diterima atau dikirim adalah panjang 65533 byte, bukan 65535.
Sebuah tes cepat dalam database 12.2 menunjukkan bahwa sebagai tipe data internal , Oracle masih memperlakukan VARCHAR
sebagai pseudotype untuk VARCHAR2
. Ini BUKAN SYNONYM
yang merupakan tipe objek aktual di 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)
Ada juga beberapa implikasi VARCHAR
untuk opsi ProC / C ++ Precompiler. Untuk programmer yang tertarik, tautannya ada di: Pro * C / C ++ Panduan Programmer
Setelah beberapa percobaan (lihat di bawah), saya dapat mengonfirmasi bahwa pada September 2017, tidak ada yang berubah sehubungan dengan fungsi yang dijelaskan dalam jawaban yang diterima : -
NULL
s untuk keduanyaVARCHAR
danVARCHAR2
.Alasan historis dari kedua kata kunci ini dijelaskan dengan baik dalam jawaban untuk pertanyaan yang berbeda .
VARCHAR dapat menyimpan hingga 2000 byte karakter sedangkan VARCHAR2 dapat menyimpan hingga 4000 byte karakter.
Jika kita mendeklarasikan datatype sebagai VARCHAR maka ia akan menempati ruang untuk nilai NULL. Dalam hal tipe data VARCHAR2, ia tidak akan menempati ruang apa pun untuk nilai NULL. misalnya,
name varchar(10)
akan mencadangkan 6 byte memori walaupun namanya 'Ravi__', sedangkan
name varchar2(10)
akan menyimpan ruang sesuai dengan panjang string input. mis., 4 byte memori untuk 'Ravi__'.
Di sini, _ mewakili NULL.
CATATAN: varchar akan menyediakan ruang untuk nilai nol dan varchar2 tidak akan menyediakan ruang untuk nilai nol.
VARCHAR
dengan CHAR
.
Saat ini, mereka sama. tapi sebelumnya
VARCHAR
dicadangkan oleh Oracle untuk mendukung perbedaan antara NULL
dan mengosongkan string di masa depan, sesuai standar ANSI.
VARCHAR2
tidak membedakan antara NULL
string kosong dan, dan tidak akan pernah.
Emp_name varchar(10)
- jika Anda memasukkan nilai kurang dari 10 digit maka ruang yang tersisa tidak dapat dihapus. Ini menggunakan total 10 ruang.
Emp_name varchar2(10)
- jika Anda memasukkan nilai kurang dari 10 digit maka ruang yang tersisa secara otomatis dihapus
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;