вставить не работает на mysql 5.7.12-0?

моя структура таблицы

CREATE TABLE IF NOT EXISTS `emp` ( `id` int(3) NOT NULL AUTO_INCREMENT, `name` varchar(11) DEFAULT NULL, `age` varchar(31) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

Мой запрос:

  INSERT INTO `emp` (`id`, `name`) VALUES ('1', 'prashant'); 

Это работает со всеми версиями MYSQL ниже 5.7, но не работает с MYSQL версии 5.7.12-0ubuntu1

Получение ошибки:

 #1364 - Field 'age' doesn't have a default value 

Что нового в этой версии?

Попробуйте в версии mysql ниже 5.7, вы увидите разницу.

Благодаря 🙂

Было бы большим сюрпризом, если бы это сработало в любой версии mysql. Скопируйте его в sqlfiddle.com (mysql 5.6 или 5.5) и подтвердите сами.

age определяется как varchar(31) а не null. Таким образом, ваш оператор insert должен иметь значение для этого столбца. Или вы должны указать значение по умолчанию. Пока вы на нем, измените его на более подходящий тип данных.

  CREATE TABLE IF NOT EXISTS `emp` ( `id` int(3) NOT NULL AUTO_INCREMENT, `name` varchar(11) DEFAULT NULL, `age` int(3) NOT NULL default 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

Обновлено:

Подумав об этом, я думаю, что вы отключили Strict Mode в своей старой версии mysql

Строгий режим контролирует, как MySQL обрабатывает недопустимые или отсутствующие значения в операторах смены данных, таких как INSERT или UPDATE. Значение может быть недействительным по нескольким причинам. Например, он может иметь неправильный тип данных для столбца, или он может быть вне допустимого диапазона. Значение отсутствует, когда новая строка, которая должна быть вставлена, не содержит значения для столбца, отличного от NULL, который не имеет явного предложения DEFAULT в своем определении. (Для столбца NULL NULL вставлен, если значение отсутствует.) Строгий режим также влияет на заявления DDL, такие как CREATE TABLE.

Поэтому мое первоначальное заявление неверно! При отключенном режиме строки по умолчанию для varchar, вероятно, '' (не уверен, хотя никогда не использовал строгий режим)

В вашем столетии возраст описывается как not null .

 `age` varchar(31) NOT NULL 

Таким образом, требуется поле для вставки.

Ограничение NOT NULL налагает на поле всегда значение. Это означает, что вы не можете вставить новую запись или обновить запись, не добавляя значение в это поле. Вы должны указать значение для возраста также в своем запросе на insert потому что оно не может быть null . Например: –

 insert into emp(`id`,`name`,`age`) values('1','rahul','26') 

надеюсь, что это поможет!