`id` int(10) NOT NULL авто_инкремент

#mysql

#mysql

Вопрос:

Некоторые скрипты, которые я перенес, выполняют множество

 INSERT INTO `table` ( `id` , `fld2` , `fld3`) VALUES ( '', 'v2', 'v3')
  

id определяется как: int(10) NOT NULL auto_increment .

Моя база данных / сервер mysql (5.1.57) выдает ошибку:

 1366 - Incorrect integer value: '' for column 'id' at row 1
  

'' принимался без синтаксической ошибки и автоматически увеличивал целочисленное поле до следующего числа на исходном сервере (5.1.52). Есть идеи, в чем может быть разница в настройке сервера mysql? Это не может быть разница в версии, обе версии 5.1.xx?

Комментарии:

1. Что происходит, когда вы запускаете ВСТАВКУ ЗНАЧЕНИЙ В таблицу (fld2, fld3) (‘v2’, ‘v3’)?

Ответ №1:

Поскольку идентификатор равен авто_инкременту, вы не должны упоминать его в своем запросе insert :

 INSERT INTO table (fld2 , fld3) VALUES ('v2', 'v3')
  

И, кроме того, вы вставляете строку в свой идентификатор, поэтому, если бы это было не авто_инкремент, вы бы все равно получили ту же ошибку.

Комментарии:

1. если вам абсолютно необходимо указать значение для этого столбца, тогда включите его, но вместо того, чтобы устанавливать его как '' переданное NULL , и оно тоже будет автоматически увеличено.

Ответ №2:

Похоже, настройки текущего сервера по умолчанию отличаются от предыдущих. Взгляните на документацию MySQL относительно настроек строгого режима.

Комментарии:

1. Похоже, это виновник. Но после удаления sql-mode=»STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION», перезапуска сервера, создания новой базы данных, ВЫБОРА @@GLOBAL.sql_mode все еще показывает «STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION»

2. УСТАНОВИТЕ @@global.sql_mode= «; Проблема решена.