Задавайте вопросы, мы ответим
Вы не зашли.
Скорректировал свой ответ. Значения по умолчанию не будет. В режиме @@sql_mode='TRADITIONAL'; вместо Warning будет генерироваться ошибка.
Неактивен
rgbeast написал:
Если NOT NULL, то значения по умолчанию не будет, но при вставке MySQL добавит 0 для целых и пустую строку для символьных переменных, при этом сгенерировав Warning.
А если хочется, чтобы MySQL позволял вставлять лишь те данные, которые явно указаны, то можно указать sql-mode strict_all_tables.
mysql> SET @@SESSION.sql_mode='strict_all_tables'; Query OK, 0 rows affected (0.00 sec) mysql> create table t_6483(val varchar(255) NOT NULL); Query OK, 0 rows affected (0.54 sec) mysql> insert into t_6483 values(); ERROR 1364 (HY000): Field 'val' doesn't have a default value
В ином случае - да, проходит вставка пустой строки (не null, а именно пустой строки), но генерируется warning
mysql> SET @@SESSION.sql_mode=''; Query OK, 0 rows affected (0.00 sec) mysql> DROP table t_6483; Query OK, 0 rows affected (0.00 sec) mysql> create table t_6483(val varchar(255) NOT NULL); Query OK, 0 rows affected (0.43 sec) mysql> insert into t_6483 values(); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> show warnings; +---------+------+------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------+ | Warning | 1364 | Field 'val' doesn't have a default value | +---------+------+------------------------------------------+ 1 row in set (0.00 sec) mysql> select * from t_6483; +-----+ | val | +-----+ | | +-----+ 1 row in set (0.00 sec)
Неактивен
Большое все спасибо за ответ.
Неактивен