Tôi không biết về MySQL và PostgreSQL, nhưng hãy để tôi xử lý vấn đề này một chút nói chung.
Có một DBMS là Oracle không cho phép chọn người dùng giữa NULL và ''. Điều này chứng tỏ rõ ràng rằng không cần thiết phải phân biệt giữa cả hai. Có một số hậu quả khó chịu:
Bạn đặt một varchar2 thành một chuỗi rỗng như thế này:
Update mytable set varchar_col = '';
những điều sau đây dẫn đến kết quả tương tự
Update mytable set varchar_col = NULL;
Nhưng để chọn các cột có giá trị trống hoặc NULL, bạn phải sử dụng
select * from mytable where varchar_col is NULL;
Sử dụng
select * from mytable where varchar_col = '';
là đúng về mặt cú pháp, nhưng nó không bao giờ trả về một hàng.
Mặt khác, khi nối các chuỗi trong Oracle. Các varchars NULL được coi là chuỗi rỗng.
select NULL || 'abc' from DUAL;
năng suất abc . DBMS khác sẽ trả về NULL trong những trường hợp này.
Khi bạn muốn thể hiện rõ ràng, rằng một giá trị được gán, bạn phải sử dụng cái gì đó như ''.
Và bạn phải lo lắng liệu việc cắt tỉa không có kết quả trống trong NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Nó làm.
Bây giờ nhìn vào DBMS trong đó '' không giống với NULL (ví dụ: SQL-Server)
Làm việc với '' thường dễ dàng hơn và trong hầu hết các trường hợp không có nhu cầu thực tế để phân biệt giữa cả hai. Một trong những trường hợp ngoại lệ tôi biết, là khi cột của bạn đại diện cho một số cài đặt và bạn không mặc định trống cho chúng. Khi bạn có thể phân biệt giữa '' và NULL, bạn có thể bày tỏ rằng cài đặt của bạn trống và tránh áp dụng mặc định đó.
NULL
hay không