Tôi biết chủ đề này là một chút tranh cãi và có rất nhiều bài viết / ý kiến khác nhau nổi trên internet. Thật không may, hầu hết trong số họ cho rằng người đó không biết sự khác biệt giữa NULL và chuỗi rỗng là gì. Vì vậy, họ kể những câu chuyện về kết quả đáng ngạc nhiên với các phép nối / tổng hợp và thường làm các bài học SQL nâng cao hơn một chút. Bằng cách này, họ hoàn toàn bỏ lỡ toàn bộ vấn đề và do đó vô dụng đối với tôi. Vì vậy, hy vọng câu hỏi này và tất cả các câu trả lời sẽ di chuyển chủ đề một chút về phía trước.
Giả sử tôi có một bảng chứa thông tin cá nhân (tên, ngày sinh, v.v.) trong đó một trong các cột là địa chỉ email có kiểu varchar. Chúng tôi cho rằng vì một số lý do, một số người có thể không muốn cung cấp địa chỉ email. Khi chèn dữ liệu đó (không có email) vào bảng, có hai lựa chọn khả dụng: đặt ô thành NULL hoặc đặt thành chuỗi trống (''). Giả sử rằng tôi nhận thức được tất cả các ý nghĩa kỹ thuật của việc chọn một giải pháp trên một giải pháp khác và tôi có thể tạo các truy vấn SQL chính xác cho cả hai kịch bản. Vấn đề là ngay cả khi cả hai giá trị khác nhau ở cấp độ kỹ thuật, chúng hoàn toàn giống nhau ở mức logic. Sau khi nhìn vào NULL và '' Tôi đã đi đến một kết luận duy nhất: Tôi không biết địa chỉ email của anh chàng. Ngoài ra, bất kể tôi đã cố gắng thế nào, Tôi đã không thể gửi e-mail bằng cách sử dụng NULL hoặc chuỗi trống, vì vậy rõ ràng hầu hết các máy chủ SMTP ngoài đó đồng ý với logic của tôi. Vì vậy, tôi có xu hướng sử dụng NULL khi tôi không biết giá trị và coi chuỗi rỗng là một điều xấu.
Sau một số cuộc thảo luận căng thẳng với các đồng nghiệp, tôi đã đưa ra hai câu hỏi:
Tôi có đúng không khi cho rằng việc sử dụng chuỗi rỗng cho một giá trị không xác định sẽ khiến cơ sở dữ liệu "nói dối" về các sự kiện? Nói chính xác hơn: sử dụng ý tưởng của SQL về giá trị là gì và không phải là gì, tôi có thể đi đến kết luận: chúng tôi có địa chỉ email, chỉ bằng cách tìm ra nó không phải là null. Nhưng sau đó, khi cố gắng gửi e-mail, tôi sẽ đi đến kết luận mâu thuẫn: không, chúng tôi không có địa chỉ e-mail, rằng cơ sở dữ liệu @! # $ Phải nói dối!
Có kịch bản logic nào trong đó một chuỗi rỗng '' có thể là một nhà cung cấp thông tin quan trọng tốt như vậy (bên cạnh giá trị và không có giá trị), sẽ gây rắc rối / không hiệu quả khi lưu trữ theo bất kỳ cách nào khác (như cột bổ sung). Tôi đã thấy nhiều bài đăng tuyên bố rằng đôi khi sử dụng chuỗi rỗng cùng với các giá trị thực và NULL, nhưng cho đến nay vẫn chưa thấy một kịch bản nào hợp lý (về mặt thiết kế SQL / DB).
Tái bút: Một số người sẽ bị cám dỗ trả lời, rằng đó chỉ là vấn đề sở thích cá nhân. Tôi không đồng ý. Đối với tôi đó là một quyết định thiết kế với những hậu quả quan trọng. Vì vậy, tôi muốn xem câu trả lời trong đó opion về điều này được hỗ trợ bởi một số lý do hợp lý và / hoặc kỹ thuật.
''
ngay cả trong Oracle, cũng không giống như NULL
. Ví dụ: việc gán một CHAR(1)
cột giá trị ''
sẽ dẫn đến ' '
(tức là khoảng trắng), chứ không phải NULL
. Ngoài ra, nếu Jacek đang sử dụng Oracle, câu hỏi này có thể sẽ không xuất hiện :-)
'' IS NULL
đánh giá là true
trong PL / SQL.