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