Nếu c1
là CHAR(1)
, sau đó điều này là đúng, như CHAR
cột chiều rộng cố định và sẽ được lấp đầy bằng các đoạn trống nếu cần thiết.
Vì vậy, ngay cả khi bạn đặt ''
vào trường CHAR(1)
, bạn sẽ nhận được ' '
khi SELECT
ing. Ngoài ra, lọc cho một chuỗi trống sẽ mang lại ' '
.
Vui lòng chấp nhận câu trả lời của Martin Smith, vì ông đã đưa ra gợi ý chính xác trước tôi.
Ngoài ra, theo
MySQL documentation, dấu khoảng trắng bị bỏ qua khi so sánh chuỗi với
=
, vì vậy nếu cột
c1
của bạn chỉ chứa không gian (hoặc một trong trường hợp của bạn), nó sẽ được trả lại ngay cả khi bạn lọc
WHERE c1 = ''
:
Đặc biệt, không gian trailing là đáng kể, đó là không đúng sự thật để so sánh CHAR hay VARCHAR thực hiện với toán tử =
mysql> SELECT 'a' = 'a ', 'a' LIKE 'a ';
+------------+---------------+
| 'a' = 'a ' | 'a' LIKE 'a ' |
+------------+---------------+
| 1 | 0 |
+------------+---------------+
1 row in set (0.00 sec)
Nguồn
2016-09-19 11:56:50
Bạn có thể chia sẻ một câu đố sql không? – 1000111
Bạn có chắc chắn nó là KHÔNG GIAN và không TAB? –
Kết quả của "SELECT c1 từ bảng nơi CHAR_LENGTH (c1) = 0" là gì? –