it-swarm.asia

Apa perbedaan antara tipe data Oracle VARCHAR dan VARCHAR2?

Saat memigrasi tabel yang berasal dari DBMS lain ke Oracle, salah satu tugas standar adalah ganti semua VARCHAR(n) bidang dengan VARCHAR2(n) bidang (disediakan n <= 4000) .

Mengapa Oracle menyebut tipe data ini VARCHAR2 dan bukan hanya VARCHAR seperti DBMS lainnya?

19
bernd_k

Tampaknya Oracle pada suatu waktu punya rencana untuk memberikan definisi yang berbeda untuk [~ # ~] varchar [~ # ~] daripada ke VARCHAR2 . Ini telah memberi tahu pelanggan ini dan merekomendasikan untuk tidak menggunakan [~ # ~] varchar [~ # ~] . Apa pun rencana mereka, per 11.2.0.2 [~ # ~] varchar [~ # ~] identik dengan VARCHAR2 . Inilah yang Referensi Bahasa SQL 11g Rilis 2 mengatakan:

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/Panduan Pengguna SQL dan Referensi 10g Rilis 2 begini:

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 Konsep Database 10g Rilis 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 .

26
Leigh Riffel

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 mendatang 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.

25
Justin Cave

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

3
Gaius