Mysql error 1364 Поле не имеет значений по умолчанию

Моя таблица выглядит как

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.