Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle tidak membedakan antara null dan string kosong?

Oracle sangat sangat sangat tua.

Kembali ke 80's ketika dikembangkan (dan sebelum ada standar apa pun) mereka pikir itu adalah ide yang bagus, dan kemudian diberikan cara Oracle menyimpan nilainya, itu benar-benar.

Begini caranya Oracle menyimpan data (diambil dari dokumentasi ):

Tidak ada tipe data yang disimpan di dalam data, hanya panjang data dan data itu sendiri.

Jika NULL terjadi antara dua kolom dengan nilai, itu disimpan sebagai satu byte yang berarti kolom memiliki panjang 0 (sebenarnya, 0xFF ). Mengikuti NULL s tidak disimpan sama sekali.

Jadi untuk menyimpan nilai 'test' , Oracle perlu menyimpan 5 byte:04 74 65 73 74 .

Namun, untuk menyimpan string kosong dan NULL , Oracle hanya perlu mengatur panjang data ke 0 .

Sangat cerdas jika data Anda disimpan di 20 Mb hard drive seharga 5,000$ masing-masing.

Kemudian, ketika standar muncul, itu bukan ide yang bagus lagi, tetapi pada saat itu sudah ada banyak sekali kode yang mengandalkan NULL dan '' menjadi hal yang sama.

Membuat VARCHAR melakukan perbedaan seperti itu akan menghancurkan ton kode.

Untuk memperbaikinya, mereka mengganti nama VARCHAR ke VARCHAR2 (yang bukan merupakan bagian dari standar apapun), menyatakan bahwa VARCHAR2 akan tidak pernah membedakan antara NULL dan string kosong dan mendesak semua orang untuk menggunakan tipe data ini.

Sekarang mereka mungkin sedang menunggu orang terakhir yang menggunakan VARCHAR di Oracle database mati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Metode Pengaturan Parameter NLS dan Prioritasnya (Oracle Database)

  2. Aksen dan susunan huruf besar/kecil di Oracle dengan LIKE

  3. Oracle (11.2.0.1) :Cara mengidentifikasi baris yang saat ini diperbarui oleh pernyataan UPDATE

  4. Menghasilkan Angka Acak Di Setiap Baris Dalam Oracle Query

  5. Pilih baris terbaru untuk setiap grup dari oracle