DÂY CHUYỀN KHẨN CẤP
Trong ORACLE, một chuỗi trống được sử dụng để đại diện VÔ GIÁ TRỊ. Tuy nhiên, trong hầu hết mọi thứ khác, một chuỗi rỗng vẫn là một chuỗi và vì vậy không phải là NULL.
INTS
Trong trường hợp của bạn, bạn thực sự đang chèn STRINGS vào cột INT. Điều này buộc một ngầm định Hoạt động CAST.
Khi RDBMS của bạn đang chuyển đổi chuỗi ''
thành INT, nó phải nhận giá trị 0. Vì 0 không phải là NULL, điều này sẽ được chèn.
Một bài kiểm tra hợp lệ hơn sẽ là:
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);
CHỈNH SỬA
Xin lỗi, tôi chỉ đọc được một nửa câu hỏi của bạn. Bạn cũng hỏi cách dừng ''
đang được chèn.
Vấn đề đầu tiên của bạn là bạn đang chèn STRINGS và bảng được xác định là có các trường INT. Bạn có thể đặt các ràng buộc đối với dữ liệu được chèn vào, nhưng các ràng buộc này sẽ áp dụng giá trị after chuyển đổi thành INT. Trừ khi bạn muốn ngăn giá trị 0
cũng bị chèn, bạn không thể làm gì với bảng để ngăn chặn trường hợp này.
Đặt cược tốt hơn của bạn là giải quyết lý do tại sao bạn lại chèn chuỗi ngay từ đầu. Bạn có thể sử dụng một thủ tục được lưu trữ để thực hiện và kiểm tra các chuỗi trước khi chuyển đổi chúng thành INT và sau đó chèn chúng. Hoặc, tốt hơn hết, bạn có thể thực hiện kiểm tra trong đơn đăng ký khách hàng của mình.
Một tùy chọn khả dụng về mặt kỹ thuật là tạo các trường CHAR trường, sau đó đặt một ràng buộc cho các trường, ngăn ''
khỏi bị chèn. Tôi sẽ mạnh mẽ khuyến nghị không nên làm như vậy.