Как разрешить пустую строку для integer в MySQL?

У меня есть целые поля в таблице. POST отправляются сложным JavaScript. Они отправляют пустую строку типа "", но, как вы полагаете, MySQL не позволяет создавать строки emty в целых полях. Есть ли возможность разрешить пустые строки? Например, если он принимает пустую строку, он сохранит его как NULL.

Solutions Collecting From Web of "Как разрешить пустую строку для integer в MySQL?"

Удаление sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" из my.ini решило проблему.

Предполагая, что столбец допускает значения NULL , вы должны явно указывать MySQL на использование значения NULL , а не на передачу пустой строки (которая отлита до 0 ):

 INSERT INTO table (column_name) VALUES (NULL); 

Есть два способа сделать это.

  1. Для текущей сессии Mysql (временное решение)

Сначала выполните запрос, чтобы получить текущий режим SQL вашего сервера mysql.

  mysql> SELECT @@sql_mode; +----------------------------------------------------------------+ | @@sql_mode | +----------------------------------------------------------------+ |STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +----------------------------------------------------------------+ 1 row in set (0.00 sec) 

Если результат содержит STRICT_TRANS_TABLES , вы должны удалить это значение, чтобы разрешить вставить запрос для получения значения NULL. Убедитесь, что пользователь mysql имеет права применять эти изменения и перезапустить Mysql Server после применения этого.

  SET GLOBAL sql_mode = ''; 
  1. Для времени жизни Mysql (постоянное решение)

Вам необходимо обновить файл my.cnf. Местоположение этого файла: \ etc \ my.cnf или \ etc \ mysql \ mysql.cnf

В [mysqld] будут установлены некоторые параметры по умолчанию

 [mysqld] innodb_file_per_table=1 default-storage-engine=MyISAM performance-schema=0 max_allowed_packet=268435456 open_files_limit=10000 по [mysqld] innodb_file_per_table=1 default-storage-engine=MyISAM performance-schema=0 max_allowed_packet=268435456 open_files_limit=10000 

Просто добавьте одну строку под

 sql-mode="" 

Обязательно перезапустите Mysql Server после изменения этого файла. Обычно пользователь root будет владельцем файла, поэтому вам необходимо войти в систему с пользователем root на сервере.

Для получения дополнительной информации, чтобы понять, что делает этот режим SQL.

STRICT_TRANS_TABLES

Включите строгий режим SQL для транзакционных систем хранения данных и, если возможно, для не транзакционных систем хранения. Подробнее см. Строгий режим SQL.

См. http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_strict_trans_tables

NO_AUTO_CREATE_USER

Предотвратите автоматическое создание инструкции GRANT, если это будет сделано иначе, если не будет указана информация об аутентификации. Оператор должен указать непустой пароль, используя IDENTIFIED BY или плагин аутентификации, используя IDENTIFIED WITH.

См. http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_auto_create_user

NO_ENGINE_SUBSTITUTION

Управляйте автоматической заменой механизма хранения по умолчанию, когда оператор, такой как CREATE TABLE или ALTER TABLE, указывает механизм хранения, который отключен или не скомпилирован.

См. http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_engine_substitution