Можно ли вставить пустую строку в поле NOT NULL?

Можно ли вставить пустую строку в не пустое поле?

insert into xyz(A,B) values(1,'');  // is this possible if B is NOT NULL?

Ответ 1

Да, вы можете... Концепция значения NULL является распространенным источником путаницы для новичков SQL, которые часто считают, что NULL совпадает с пустой строкой '' или значением нуля.

Это не так. Концептуально NULL означает "недостающее неизвестное значение", и оно трактуется несколько иначе, чем другие значения. Например, чтобы проверить значение NULL, вы не можете использовать операторы арифметического сравнения, такие как =, <, или < > в большинстве СУБД.

Ответ 2

Зависит от СУБД.

Oracle no: '' и null идентичны

SQL-Server да: '', а null - разные значения.

Ответ 3

Как сказал Даниэль, да, вы можете вставить строку нулевой длины в поле NOT NULL (кроме Oracle). Однако, если вы хотите также исключить строки нулевой длины, вы можете добавить ограничение:

ALTER TABLE xyz ADD CONSTRAINT CHECK (b LIKE '_%');

Большинство современных баз данных имеют оператор или функцию регулярного выражения, которую можно использовать для ограничений, но точный синтаксис варьируется от базы данных к базе данных.