Trong InnoDB:
- NULL chiếm ít dung lượng hơn, độ dài NULL là NULL.
- Chuỗi rỗng ('') chiếm dung lượng, độ dài = 0 (nhưng
COUNT(cot)đếm = 1).
Minh họa
Tạo bảng DemoEmptyAndNULL:
mysql> CREATE TABLE DemoEmptyAndNULL (Message VARCHAR(100));
Chèn chuỗi rỗng
mysql> INSERT INTO DemoEmptyAndNULL VALUES(' ');
mysql> SELECT COUNT(message) FROM DemoEmptyAndNULL;
+----------------+
| COUNT(message) |
+----------------+
| 1 |
+----------------+
COUNT trả về 1 (có 1 hàng không NULL).
Chèn NULL
mysql> DELETE FROM DemoEmptyAndNULL WHERE message = ' '; mysql> INSERT INTO DemoEmptyAndNULL VALUES(); -- NULL mysql> SELECT COUNT(message) FROM DemoEmptyAndNULL; +----------------+ | COUNT(message) | +----------------+ | 0 | +----------------+
COUNT trả về 0 vì bỏ qua NULL.
Kết luận
Dù NULL tiết kiệm không gian và COUNT không gây ngoại lệ, nhưng chuỗi rỗng thường tốt hơn vì:
- Tránh logic phức tạp xử lý NULL (IS NULL/IS NOT NULL).
- Một số hàm/ORMapping hoạt động nhất quán hơn với chuỗi rỗng.
- NULL ép hệ thống làm thêm việc (kiểm tra bitmap NULL).
Tuy nhiên, chọn tùy theo ngữ nghĩa nghiệp vụ: NULL = "chưa biết/không áp dụng", '' = "biết rõ là rỗng".