Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle не прави разлика между нулеви и празни низове?

Oracle е много много много стар.

Обратно в 80's когато беше разработен (и преди да е имало някакви стандарти), те смятаха, че това е добра идея и като се има предвид начинът Oracle съхранява своите стойности, наистина беше така.

Ето как Oracle съхранява данни (взети от документацията ):

В данните не се съхранява тип данни, а само дължината на данните и самите данни.

Ако NULL възниква между две колони със стойности, съхранява се като един байт, което означава, че колоната има дължина 0 (всъщност, 0xFF ). Завършващ NULL s изобщо не се съхраняват.

Така че, за да съхраните стойността 'test' , Oracle трябва да съхранява 5 байта:04 74 65 73 74 .

Въпреки това, за да съхранявате както празен низ, така и NULL , Oracle просто трябва да зададете дължината на данните на 0 .

Много умно, ако вашите данни трябва да се съхраняват на 20 Mb твърди дискове, които струват 5,000$ всеки.

По-късно, когато се появиха стандартите, това вече не беше толкова добра идея, но по това време вече имаше много и много код, разчитащ на NULL и '' е едно и също нещо.

Създаване на VARCHAR да направиш такова разграничение ще счупити на кода.

За да го поправят, те преименуваха VARCHAR към VARCHAR2 (което не е част от нито един стандарт), заяви, че VARCHAR2 щеникога прави разлика между NULL и празен низ и призова всички да използват този тип данни вместо това.

Сега те вероятно чакат последния човек, който е използвал VARCHAR в Oracle база данни да умре.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Може ли някой да обясни какво наистина прави изявлението MERGE в Oracle?

  2. R12.2 Онлайн доклад за готовност за корекция

  3. Кеш на резултатите

  4. Защо получавам PLS-00302:компонентът трябва да бъде деклариран, когато съществува?

  5. ЗАРЕЖДАНЕ НА ДАННИ INFILE еквивалент в Oracle