Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tôi đặt một cột MySQL thành KHÔNG ĐẦY ĐỦ nhưng tôi vẫn có thể chèn một giá trị trống

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết hợp hai câu lệnh select trong hai cột?

  2. Chính xác thì các giao dịch với PHP PDO hoạt động như thế nào với đồng thời?

  3. Lỗi MySQL khi cố gắng cắt ngắn bảng

  4. Duy trì dữ liệu không nguyên thủy trong JPA

  5. Truy vấn MySQL trong vòng lặp so với sử dụng tham gia SQL