ПУСТЫЕ СТРОКИ
В ORACLE пустая строка используется для представления NULL. Однако практически во всем остальном пустая строка по-прежнему является строкой и поэтому не равна NULL.
INTS
В вашем случае вы фактически вставляете STRINGS в столбец INT. Это вызывает неявную CAST операцию.
Когда ваша СУБД преобразует строку ''
в INT, она должна получить значение 0. Поскольку 0 не равно NULL, это вставляется.
Более действительный тест будет:
INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
VALUES (66, NULL);
EDIT
Извините, я только наполовину прочитал ваш вопрос. Вы также спрашиваете, как остановить вставку ''
.
Ваша первая проблема заключается в том, что вы вставляете STRINGS, и таблица определена как имеющая поля INT. Вы можете наложить ограничения на вставляемые данные, но эти ограничения будут применять значение после преобразования в INT. Если вы не хотите, чтобы значение 0
также не вставлялось, вы ничего не можете сделать с таблицей, чтобы предотвратить этот сценарий.
Лучше всего решить, зачем вы вставляете строки. Вы можете использовать хранимую процедуру, которая принимает и проверяет строки, прежде чем преобразовать их в INT и затем вставить их. Или, что еще лучше, вы можете выполнить проверки в своем клиентском приложении.
Технически доступный вариант - создать поля CHAR полей, а затем наложить ограничения на поля, предотвращая вставку ''
. Я бы настоятельно рекомендовал бы против этого.