Apa perbedaan antara tipe data Oracle VARCHAR dan VARCHAR2?

Jawaban:

26

Tampaknya Oracle pada suatu waktu punya rencana untuk memberikan definisi yang berbeda untuk VARCHAR daripada VARCHAR2 . Ini telah memberi tahu pelanggan ini dan merekomendasikan untuk tidak menggunakan VARCHAR . Apa pun rencana mereka, pada 11.2.0.2 VARCHAR identik dengan VARCHAR2 . Berikut adalah apa yang dikatakan Referensi Bahasa SQL 11g Rilis 2 :

Jangan gunakan tipe data VARCHAR. Gunakan tipe data VARCHAR2 sebagai gantinya. Meskipun tipe data VARCHAR saat ini identik dengan VARCHAR2, tipe data VARCHAR dijadwalkan akan didefinisikan ulang sebagai tipe data terpisah yang digunakan untuk string karakter panjang variabel dibandingkan dengan semantik perbandingan yang berbeda.

The PL / SQL Panduan Pengguna dan Referensi 10g Release 2 menempatkan cara ini:

Saat ini, VARCHAR identik dengan VARCHAR2. Namun, dalam rilis PL / SQL mendatang, untuk mengakomodasi standar SQL yang muncul, VARCHAR mungkin menjadi tipe data terpisah dengan semantik perbandingan yang berbeda. Sebaiknya gunakan VARCHAR2 daripada VARCHAR.

Dokumen Database Concepts 10g Release 2 mengatakan hal yang sama dalam istilah yang lebih kuat:

Tipe data VARCHAR identik dengan tipe data VARCHAR2. Untuk menghindari kemungkinan perubahan perilaku, selalu gunakan datatype VARCHAR2 untuk menyimpan string karakter panjang variabel.

Dokumentasi Oracle 9.2 dan 8.1.7 pada dasarnya mengatakan hal yang sama, jadi meskipun Oracle terus-menerus mengecilkan penggunaan VARCHAR , sejauh ini mereka belum melakukan apa pun untuk mengubah paritasnya dengan VARCHAR2 .

Leigh Riffel
sumber
Saya ingat varchar2 di Oracle 8i, tapi saya tidak yakin apakah itu varchar yang sama saat itu.
bernd_k
Ada indikasi bahwa pada titik tertentu sebelum 8i definisi mungkin berbeda.
Leigh Riffel
Saya dulu berpikir ada batas panjang yang berbeda pada varcharsebelum versi 8, tetapi saya tidak dapat menemukan sesuatu yang memiliki reputasi baik untuk mendukung ini dan sekarang bertanya-tanya apakah itu hanya mitos.
Jack Douglas
@ Jack Douglas - Saya tidak dapat menemukan apa pun di dokumentasi Oracle 7 tentang itu. Dari docs.oracle.com/cd/A57673_01/DOC/dcommon/oin/indexj.htm >> Oracle 7 Server >> Konsep Server >> Oracle Datatypes (tidak dapat langsung menautkannya) mengatakan hal yang sama seperti nanti versi. Di bagian lain dari dokumentasi versi 7 dikatakan bahwa dalam versi 6 Varchar dan Varchar2 adalah sinonim untuk char.
Leigh Riffel
25

Saat ini, keduanya sama.

VARCHAR adalah tipe data standar ANSI tetapi implementasi Oracle dari tipe data VARCHAR melanggar standar ANSI dengan mempertimbangkan string kosong menjadi NULL (Implementasi Oracle mendahului standar ANSI). Seperti yang ditunjukkan Leigh, Oracle telah menyatakan bahwa semantik tipe data VARCHAR dapat berubah di masa depan sehubungan dengan bagaimana string kosong diperlakukan. Jika dan ketika itu terjadi, semantik dari tipe data VARCHAR2 akan tetap sama. Menggunakan tipe data VARCHAR2 lebih aman karena Anda tidak perlu khawatir bahwa beberapa versi Oracle di masa depan akan memecah kode Anda dengan menyebabkan string kosong tidak lagi dianggap NULL.

Gua Justin
sumber
3

Karena dalam standar SQL asli, VARCHAR adalah 255 karakter, dan Oracle setidaknya memiliki standar kepatuhan pada masa itu.

Gayus
sumber
Itu memberi harapan untuk melihat Oracle varchar3 (maks) dalam beberapa tahun.
bernd_k
Sql-server tidak memiliki masalah meningkatkan panjang yang diizinkan dari 255 menjadi 8000 (dan sekarang bahkan hingga maks). Mengapa Oracle membutuhkan tipe data yang berbeda.
bernd_k
1
Tidak perlu untuk varchar(max), cukup gunakanCLOB
a_horse_with_no_name
3
CLOB memiliki semantik yang berbeda dengan VARCHAR2
Gaius