У меня есть целочисленные поля в таблице. POST отправляются сложным JavaScript. Они отправляют пустую строку типа "", но, как вы полагаете, MySQL не позволяет создавать строки emty в целых полях. Есть ли возможность разрешить пустые строки? Например, если он принимает пустую строку, он сохранит ее как NULL.
Как разрешить пустую строку для integer в MySQL?
Ответ 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 = '';
- Время жизни 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);