Моя таблица выглядит как
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
Есть ли способ подавить эту ошибку, не делая поле нулевым и не удаляя триггер? В противном случае мой спящий режим увидит эти исключения (даже если сделаны вставки), а затем приложение сработает.
Ответ 1
Установите значение по умолчанию для Created_By
(например: пустой VARCHAR
), и триггер будет обновлять значение в любом случае.
create table try (
name varchar(8),
CREATED_BY varchar(40) DEFAULT '' not null
);
Ответ 2
Это вызвано режимом STRICT_TRANS_TABLES
SQL, определенным в
% PROGRAMDATA%\MySQL\MySQL Server 5.6\my.ini
файл. Удаление этой настройки и перезапуск 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 для других возможных мест конфигурационных файлов.
Ответ 3
Откройте phpmyadmin и перейдите на вкладку "Дополнительно" и выберите подменю "Переменные".
Прокрутите вниз, чтобы найти режим sql.
Измените режим sql и удалите 'STRICT_TRANS_TABLES'
Сохраните его.
Ответ 4
В phpmyadmin выполните следующие действия:
select @@GLOBAL.sql_mode
В моем случае я получаю следующее:
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES ,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Скопируйте этот результат и удалите STRICT_TRANS_TABLES
. Затем выполните следующее:
set GLOBAL sql_mode='ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
Ответ 5
Когда у меня была эта же проблема с mysql5.6.20, установленной с Homebrew, я решил ее, перейдя в my.cnf
nano /usr/local/Cellar/mysql/5.6.20_1/my.cnf
Найдите строку, которая выглядит так:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Комментировать выше строки и перезапустить сервер mysql
mysql.server restart
Ошибка исчезла!
Ответ 6
Перед каждым действием вставки я добавил строку ниже и решил свою проблему,
SET SQL_MODE = '';
Я не уверен, что это лучшее решение,
SET SQL_MODE = ''; INSERT INTO `mytable` ( `field1` , `field2`) VALUES ('value1', 'value2');
Ответ 7
Его работа и протестированная копия в файл конфигурации:/etc/mysql/my.cnf OR/bin/mysql/my.ini
[mysqld]
port = 3306
sql-mode=""
затем перезапустите MySQL
Ответ 8
Для пользователей Windows WampServer:
WAMP > MySQL > my.ini
файл поиска для sql-mode=""
Раскомментируйте его.
Ответ 9
Измените свой запрос и добавьте "IGNORE" как:
INSERT IGNORE INTO 'mytable' ( 'field1' , 'field2') VALUES ('value1', 'value2');
Ответ 10
Это, по-видимому, вызвано давней (с 2004 года) ошибкой (# 6295) в MySQL, озаглавленной
Триггеры не обрабатываются для столбцов NOT NULL.
Он предположительно был исправлен в версии 5.7.1 MySQL (Changelog, последняя запись) в 2013 году, заставляя MySQL вести себя как "по стандарту SQL" (ibid).
Ответ 11
Как говорили другие, это вызвано STRICT_TRANS_TABLES
SQL STRICT_TRANS_TABLES
.
Чтобы проверить, STRICT_TRANS_TABLES
ли режим STRICT_TRANS_TABLES
:
SHOW VARIABLES LIKE 'sql_mode';
Чтобы отключить строгий режим:
SET GLOBAL sql_mode='';
Ответ 12
Запустить консоль mysql:
mysql -u your_username -p
выберите базу данных:
USE your_database;
и запустить (также из консоли mysql):
SET GLOBAL sql_mode='';
Это отключит строгий режим, и mysql больше не будет жаловаться.
Ответ 13
i задает поля не null и проблема решена, она обновляется, когда информация управляется, чтобы хранить в ней, больше не показывалось сообщение msqli о том, что поле было пустым, поскольку вы не вставляли ему значение, а применение этого решения может работа над некоторыми проектами зависит от структуры вашего проекта.
Ответ 14
В Windows Server измените my.ini (например, программные файлы \mysql\mysql server nn\my.ini)
Я бы не просто установил sql-mode = "", скорее я предлагаю удалять STRICT_TRANS_TABLES из строки, оставить все как есть, а затем перезапустить MySQL из служебной утилиты. Добавьте комментарий для будущих программистов, кто вы и что вы сделали.
Ответ 15
я решил проблему изменения файла my.ini, расположенного в папке данных. для mysql 5.6 файл my.ini перемещен в папку данных, а не в папку установки bin или mysql.