Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle nie rozróżnia wartości null i pustych ciągów?

Oracle jest bardzo, bardzo, bardzo stary.

Powrót w 80's kiedy został opracowany (i zanim pojawiły się jakiekolwiek standardy), uważali, że to dobry pomysł, i biorąc pod uwagę sposób, Oracle przechowuje swoje wartości, tak naprawdę było.

Oto jak Oracle przechowuje dane (pobrane z dokumentacji ):

Żaden typ danych nie jest przechowywany w danych, tylko długość danych i same dane.

Jeśli NULL występuje między dwiema kolumnami z wartościami, jest przechowywany jako pojedynczy bajt, co oznacza, że ​​kolumna ma długość 0 (właściwie 0xFF ). Końcowy NULL s nie są w ogóle przechowywane.

Aby zapisać wartość 'test' , Oracle musi przechowywać 5 bajtów:04 74 65 73 74 .

Jednak, aby przechowywać zarówno pusty ciąg, jak i NULL , Oracle wystarczy ustawić długość danych na 0 .

Bardzo sprytne, jeśli Twoje dane mają być przechowywane na 20 Mb dyski twarde, które kosztują 5,000$ każdy.

Później, gdy pojawiły się standardy, nie był to już taki dobry pomysł, ale do tego czasu było już bardzo dużo kodu opartego na NULL i '' będąc tym samym.

Tworzenie VARCHAR zrobienie takiego rozróżnienia złamie tony kodu.

Aby to naprawić, zmienili nazwę na VARCHAR do VARCHAR2 (który nie jest częścią żadnego standardu) stwierdził, że VARCHAR2 nigdy rozróżnić NULL i pusty ciąg i zachęcał wszystkich, aby zamiast tego używali tego typu danych.

Teraz prawdopodobnie czekają na ostatnią osobę, która użyła VARCHAR w Oracle baza danych na śmierć.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przeprowadzić migrację bazy danych Oracle z AWS EC2 do AWS RDS

  2. 6 sposobów na wybranie zduplikowanych wierszy w Oracle

  3. Sprzężenia jawne a sprzężenia niejawne?

  4. Kursor Oracle do przypisania

  5. Oracle Floats a liczba