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.