Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ustawiam kolumnę MySQL na NOT NULL, ale nadal mogę wstawić pustą wartość

PUSTE ŁAŃCUCHY

W ORACLE pusty ciąg służy do reprezentowania ZERO. Jednak praktycznie we wszystkim innym pusty ciąg jest nadal ciągiem, a więc nie jest NULL.


INTS

W twoim przypadku faktycznie wstawiasz STRINGS do kolumny INT. Wymusza to niejawne Operacja CAST.

Kiedy twój RDBMS konwertuje ciąg '' do INT musi otrzymać wartość 0. Ponieważ 0 nie jest NULL, to zostanie wstawione.

Bardziej poprawnym testem byłoby:

INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);


EDYTUJ

Przepraszam, przeczytałem tylko w połowie twoje pytanie. Pytasz również, jak zatrzymać '' wstawiane.

Pierwszym problemem jest to, że wstawiasz STRINGS, a tabela jest zdefiniowana jako zawierająca pola INT. Możesz nałożyć ograniczenia na wstawiane dane, ale te ograniczenia zastosują wartość po konwersja na INT. Chyba że chcesz zapobiec wartości 0 przed wstawieniem, nic nie możesz zrobić z tabelą, aby zapobiec temu scenariuszowi.

Lepiej postawić na wyjaśnienie, dlaczego wstawiasz ciągi znaków w pierwszej kolejności. Można użyć procedury składowanej, która pobiera i sprawdza ciągi przed przekonwertowaniem ich na liczby całkowite, a następnie ich wstawieniem. Lub, jeszcze lepiej, możesz dokonać sprawdzenia w swojej aplikacji klienckiej.

Technicznie dostępną opcją jest utworzenie pól CHAR, a następnie nałożenie ograniczenia na pola, zapobiegające '' przed wstawieniem. Chciałbym zdecydowanie odradzam.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP:Jak wyświetlić domyślny obrazek, jeśli określony nie istnieje?

  2. Wstawianie wpisu do kolumny JSON w postgresie

  3. Obserwujesz tabelę zmian w MySQL?

  4. MySQL Nie może upuścić indeksu potrzebnego w ograniczeniu klucza obcego

  5. Instrukcja VALUES w MySQL