Tôi tin rằng câu trả lời là Oracle rất rất lâu đời.
Quay lại những ngày xa xưa trước khi có tiêu chuẩn SQL, Oracle đã đưa ra quyết định thiết kế làm trống các chuỗi trong VARCHAR
/ VARCHAR2
các cột là NULL
và rằng chỉ có một ý nghĩa về NULL (có những nhà lý thuyết quan hệ sẽ phân biệt giữa dữ liệu chưa bao giờ được nhắc, dữ liệu mà câu trả lời tồn tại nhưng người dùng không biết, dữ liệu không có câu trả lời, v.v. tất cả tạo thành một số nghĩa của NULL
).
Vào thời điểm tiêu chuẩn SQL ra đời và đồng ý rằng NULL
và chuỗi trống là các thực thể riêng biệt, đã có những người dùng Oracle có mã giả định rằng cả hai là tương đương. Vì vậy, về cơ bản Oracle đã bị bỏ lại với các tùy chọn phá vỡ mã hiện có, vi phạm tiêu chuẩn SQL hoặc giới thiệu một số loại tham số khởi tạo có thể thay đổi chức năng của một số lượng lớn truy vấn tiềm ẩn. Vi phạm tiêu chuẩn SQL (IMHO) là cách ít gây gián đoạn nhất trong ba tùy chọn này.
Oracle đã để ngỏ khả năng rằng VARCHAR
kiểu dữ liệu sẽ thay đổi trong bản phát hành trong tương lai để tuân thủ tiêu chuẩn SQL (đó là lý do tại sao mọi người sử dụng VARCHAR2
trong Oracle vì hành vi của kiểu dữ liệu đó được đảm bảo sẽ giữ nguyên về sau).