Моя таблица выглядит как
create table try ( name varchar(8), CREATED_BY varchar(40) not null);
а затем у меня есть триггер для автоматического заполнения поля CREATED_BY
create trigger autoPopulateAtInsert BEFORE INSERT on try for each row set new.CREATED_BY=user();
Когда я делаю вставку, используя
insert into try (name) values ('abc');
запись сделана в таблице, но я все равно получаю сообщение об ошибке
Field 'CREATED_BY' doesn't have a default value Error no 1364
Есть ли способ подавить эту ошибку, не делая поле обнуляемым И без удаления триггера? В противном случае мой спящий режим увидит эти исключения (даже если вставки были сделаны), и тогда приложение выйдет из строя.
Это вызвано
STRICT_TRANS_TABLES
режимом SQL, определенным вфайл. Удаление этого параметра и перезапуск MySQL должны решить проблему.
См. Https://www.farbeyondcode.com/Solution-for-MariaDB-Field--xxx--doesn-t-have-a-default-value-5-2720.html
Если редактирование этого файла не устранило проблему, см. Http://dev.mysql.com/doc/refman/5.6/en/option-files.html , чтобы узнать о других возможных местах расположения файлов конфигурации.
источник
-- verified that the mode was previously set select @@GLOBAL.sql_mode; -- UPDATE MODE SET @@global.sql_mode= 'YOUR_VALUE';
Откройте phpmyadmin, перейдите на вкладку «Еще» и выберите подменю «Переменные». Прокрутите вниз, чтобы найти режим sql. Отредактируйте режим sql и удалите STRICT_TRANS_TABLES. Сохраните его.
источник
sudo nano /etc/mysql/my.cnf
добавить[mysqld] sql_mode = "ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
, сохранить, выйти и перезапустить mysqlsudo service mysql restart
sql_mode
на null, т.е.sql_mode = ""
на другие похожие ошибки.В phpmyadmin выполните следующие действия:
В моем случае я получаю следующее:
Скопируйте этот результат и удалите
STRICT_TRANS_TABLES
. Затем выполните следующее:источник
phpmyadmin
, используйте эти команды вmysql
командной строке.Когда у меня была такая же проблема с mysql5.6.20, установленным с Homebrew, я решил ее, зайдя в my.cnf
Найдите строку, которая выглядит так:
Прокомментируйте строку выше и перезапустите сервер mysql
Ошибка исчезла!
источник
Запустите консоль mysql:
, выберите базу данных:
и запустите (также из консоли mysql):
Это отключит строгий режим, и mysql больше не будет жаловаться.
Чтобы прояснить ситуацию: в определении вашей базы данных говорится, что «это поле должно иметь значение по умолчанию», и, выполняя шаги, указанные выше, вы говорите MySql «нет, просто игнорируйте его». Так что, если вы просто хотите быстро исправить ситуацию локально, это решение подойдет. Но обычно вам следует изучить определение своей базы данных и проверить, действительно ли поле требует значения по умолчанию, и если да, установите его. И если значение по умолчанию не требуется, это требование следует убрать, чтобы ситуация была чистой.
источник
Как говорили другие, это вызвано
STRICT_TRANS_TABLES
режимом SQL.Чтобы проверить,
STRICT_TRANS_TABLES
включен ли режим:Чтобы отключить строгий режим:
источник
Перед каждым действием вставки я добавил строку ниже и решил свою проблему,
Я не уверен, что это лучшее решение,
источник
Его работа и проверенная копия в файл конфигурации: /etc/mysql/my.cnf ИЛИ /bin/mysql/my.ini
затем перезапустите MySQL
источник
Измените свой запрос и добавьте IGNORE как:
источник
Для пользователей Windows WampServer :
WAMP> MySQL> my.ini
искать файл для
sql-mode=""
Раскомментируйте это.
источник
sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"
наsql-mode=""
. Раскомментированиеsql-mode=""
вызвало ошибку.По всей видимости, это вызвано давней (с 2004 г.) ошибкой (# 6295) в MySQL под названием
Утверждается, что это было исправлено в MySQL версии 5.7.1 (журнал изменений, последняя запись) в 2013 году, что заставило MySQL вести себя как «в соответствии со стандартом SQL» (там же).
источник
NOT NULL
ограничения или добавление значения по умолчанию в столбец устранило проблему. Триггер работает должным образом.В Windows Server отредактируйте my.ini (например, программные файлы \ mysql \ mysql server nn \ my.ini)
Я бы не стал просто устанавливать sql-mode = "", скорее предлагаю удалить STRICT_TRANS_TABLES из строки, оставить все как было, а затем перезапустить MySQL из служебной утилиты. Добавьте комментарий для будущих программистов, кто вы и чем занимались.
источник
Я установил для полей значение не null, и проблема решена, он обновляется, когда информация запрошена для хранения в нем, больше не отображается сообщение msqli о том, что поле было пустым, потому что вы не вставили в него значение, ну, применение этого решения может работать на некоторых проекты зависят от структуры вашего проекта.
источник
default
атрибут столбца сnone
наNULL
. Если только не высокие рейтинговые ответы! моя cPanel давала мне отказ в доступе на общем хостинге, когда я пытался обновить переменную sql_mode.Я решил проблему с изменением файла my.ini, расположенного в папке данных. для mysql 5.6 файл my.ini перемещен в папку данных, а не в папку установки bin или mysql.
источник
Я думаю, что в этом случае в столбце имени есть нулевые значения.
источник