Apa perbedaan antara varchar dan varchar2?
oracle
sqldatatypes
hrishi
sumber
sumber
Jawaban:
Adapun sekarang, mereka adalah sinonim.
VARCHAR
dicadangkan olehOracle
untuk mendukung perbedaan antaraNULL
dan mengosongkan string di masa depan, seperti yangANSI
ditentukan standar.VARCHAR2
tidak membedakan antaraNULL
string kosong dan, dan tidak akan pernah.Jika Anda mengandalkan string kosong dan
NULL
menjadi hal yang sama, Anda harus menggunakannyaVARCHAR2
.sumber
VARCHAR2
karena saat ini tidak ada tipe yang berperilaku sepertiVARCHAR
seharusnya. Bahkan, Anda tidak boleh menggunakanVARCHAR
sama sekali sampai itu diterapkan dengan benar.where x is NULL
hasil pengembalian yang berbeda dariwhere x = ''
yang tidak berarti bahwaNULL
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
sumber
VARCHAR
tidak boleh digunakan. Saya mengeditnyaDiambil dari versi stabil terbaru produksi Oracle 12.2: Jenis Data
Perbedaan utama adalah bahwa itu
VARCHAR2
adalah tipe data internal danVARCHAR
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 maksimumVARCHAR2
bisa 4000 byte. Jika parameter init.ora max_string_size = diperluas, panjang maksimumVARCHAR2
bisa 32767 byteThe
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, sehinggaVARCHAR
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 untukVARCHAR2
. Ini BUKANSYNONYM
yang merupakan tipe objek aktual di Oracle.Ada juga beberapa implikasi
VARCHAR
untuk opsi ProC / C ++ Precompiler. Untuk programmer yang tertarik, tautannya ada di: Pro * C / C ++ Panduan Programmersumber
VARCHAR
masih memperlakukan'' == null
?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 .
sumber
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
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.
sumber
VARCHAR
denganCHAR
.Saat ini, mereka sama. tapi sebelumnya
VARCHAR
dicadangkan oleh Oracle untuk mendukung perbedaan antaraNULL
dan mengosongkan string di masa depan, sesuai standar ANSI.VARCHAR2
tidak membedakan antaraNULL
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 dihapussumber
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;
VARCHAR adalah sinonim dari VARCHAR2. Namun, Anda sebaiknya tidak menggunakan VARCHAR karena Oracle dapat mengubah semantiknya di masa depan.
sumber