Jawaban:
Adapun sekarang, mereka adalah sinonim.
VARCHARdicadangkan oleh Oracleuntuk mendukung perbedaan antara NULLdan mengosongkan string di masa depan, seperti yang ANSIditentukan standar.
VARCHAR2tidak membedakan antara NULLstring kosong dan, dan tidak akan pernah.
Jika Anda mengandalkan string kosong dan NULLmenjadi hal yang sama, Anda harus menggunakannya VARCHAR2.
VARCHAR2karena saat ini tidak ada tipe yang berperilaku seperti VARCHARseharusnya. Bahkan, Anda tidak boleh menggunakan VARCHARsama sekali sampai itu diterapkan dengan benar.
where x is NULLhasil pengembalian yang berbeda dari where x = ''yang tidak berarti bahwa NULLdan ''dengan cara apapun yang berbeda. Perilaku yang berbeda disebabkan oleh =operator.
Saat ini VARCHAR berperilaku persis sama dengan VARCHAR2. Namun, jenis ini VARCHARtidak boleh digunakan karena dicadangkan untuk penggunaan di masa mendatang.
Diambil dari: Perbedaan Antara CHAR, VARCHAR, VARCHAR2
VARCHARtidak boleh digunakan. Saya mengeditnya
Diambil dari versi stabil terbaru produksi Oracle 12.2: Jenis Data
Perbedaan utama adalah bahwa itu VARCHAR2adalah tipe data internal dan VARCHARmerupakan 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 VARCHAR2tipe data adalah string variabel-panjang karakter dengan panjang maksimal 4000 byte. Jika parameter init.ora max_string_size adalah default, panjang maksimum VARCHAR2bisa 4000 byte. Jika parameter init.ora max_string_size = diperluas, panjang maksimum VARCHAR2bisa 32767 byte
The VARCHARstring 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 VARCHARstring 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 VARCHARsebagai pseudotype untuk VARCHAR2. Ini BUKAN SYNONYMyang 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 VARCHARuntuk 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 : -
NULLs 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.
VARCHARdengan CHAR.
Saat ini, mereka sama. tapi sebelumnya
VARCHARdicadangkan oleh Oracle untuk mendukung perbedaan antara NULLdan mengosongkan string di masa depan, sesuai standar ANSI.
VARCHAR2tidak membedakan antara NULLstring 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;