Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

  • Для текущего сеанса 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

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

sql-mode=""

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

Подробнее о том, как работает этот режим SQL.

STRICT_TRANS_TABLES

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

Refer: 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

Ответ 3

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

INSERT INTO table (column_name) VALUES (NULL);