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
và ''
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.