Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle không phân biệt giữa null và chuỗi rỗng?

Oracle rất rất cũ.

Quay lại 80's khi nó được phát triển (và trước khi có bất kỳ tiêu chuẩn nào), họ nghĩ đó là một ý tưởng hay, và sau đó đưa ra cách Oracle lưu trữ các giá trị của nó, nó thực sự là như vậy.

Đây là cách Oracle lưu trữ dữ liệu (được lấy từ tài liệu ):

Không có kiểu dữ liệu nào được lưu trữ trong dữ liệu, chỉ có độ dài dữ liệu và bản thân dữ liệu.

Nếu NULL xảy ra giữa hai cột có giá trị, nó được lưu trữ dưới dạng một byte đơn có nghĩa là cột có độ dài 0 (thực ra, 0xFF ). Theo dõi NULL s hoàn toàn không được lưu trữ.

Vì vậy, để lưu trữ giá trị 'test' , Oracle cần lưu trữ 5 byte:04 74 65 73 74 .

Tuy nhiên, để lưu trữ cả một chuỗi rỗng và một NULL , Oracle chỉ cần đặt độ dài dữ liệu thành 0 .

Rất thông minh nếu dữ liệu của bạn được lưu trữ trên 20 Mb ổ cứng có giá 5,000$ mỗi.

Sau đó, khi các tiêu chuẩn xuất hiện, nó không còn là một ý tưởng hay nữa, nhưng vào thời điểm đó đã có rất nhiều mã dựa vào NULL'' giống nhau.

Tạo VARCHAR để phân biệt như vậy sẽ phá vỡ tấn mã.

Để khắc phục, họ đã đổi tên VARCHAR thành VARCHAR2 (không phải là một phần của bất kỳ tiêu chuẩn nào), đã nêu rằng VARCHAR2 sẽ không bao giờ phân biệt giữa NULL và một chuỗi trống và kêu gọi mọi người sử dụng kiểu dữ liệu này thay thế.

Bây giờ họ có thể đang đợi người cuối cùng sử dụng VARCHAR trong Oracle cơ sở dữ liệu chết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm RPAD () trong Oracle

  2. Hàm chứa () trong PL-SQL hoạt động như thế nào?

  3. câu hỏi phỏng vấn oracle PLSQL

  4. Làm thế nào để lấy ngày hiện tại trong PL / SQL?

  5. ORA-00942:Có thể chọn từ schema.table nhưng không thể chọn bảng?