133

私のテーブルは次のようになります

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

フィールドをnull可能にし、トリガーを削除せずにこのエラーを抑制する方法はありますか? そうしないと、休止状態でこれらの例外が発生し (挿入が行われた場合でも)、アプリケーションがクラッシュします。

4

19 に答える 19

45

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'
于 2016-08-26T07:43:00.603 に答える
37

Created_By(例: empty )のデフォルト値を設定するVARCHARと、トリガーはとにかく値を更新します。

create table try ( 
     name varchar(8), 
     CREATED_BY varchar(40) DEFAULT '' not null
);
于 2013-03-15T17:47:34.647 に答える
31

Homebrew でインストールされた mysql5.6.20 で同じ問題が発生したとき、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

エラーがなくなりました!

于 2014-09-15T13:37:59.980 に答える
12

その作業とテスト済み 構成ファイルにコピー: /etc/mysql/my.cnf または /bin/mysql/my.ini

[mysqld]
port = 3306
sql-mode=""

次にMySQLを再起動します

于 2016-08-30T07:44:49.493 に答える
6

これは、MySQLの長年(2004 年以降)のバグ (#6295)が原因のようです。

NOT NULL 列のトリガーは処理されません

これは、2013 年に MySQL のバージョン 5.7.1 で修正されたと言われています (変更ログ、最後のエントリ)。これにより、MySQL は「SQL 標準に従って」動作するようになりました (同上)。

于 2015-04-24T17:52:37.987 に答える
1

フィールドをnull以外に設定し、問題を解決しました。情報をそこに保存するように指示されたときに更新されます。フィールドに値を挿入しなかったため、フィールドが空だったというmsqliメッセージは表示されなくなりました。プロジェクトは、プロジェクト構造によって異なります。

于 2016-11-25T01:34:21.703 に答える
0

データフォルダーにある my.ini ファイルを変更する問題を解決しました。mysql 5.6 の場合、my.ini ファイルは bin または mysql インストール フォルダーではなくデータ フォルダーに移動されました。

于 2019-06-02T09:58:18.090 に答える
0

この場合、名前列にはnull値があると思います。

update try set name='abc' where created_by='def';
  
于 2020-06-25T05:56:51.077 に答える