4


私はテーブルを持っています

CREATE TABLE `devicelist` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `serial` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `networkname` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `login` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL,
  `peopleid` int(10) unsigned NOT NULL,
  `deviceid` int(10) unsigned NOT NULL,
  `placeid` int(10) unsigned NOT NULL,
  `stationid` int(10) unsigned NOT NULL,
  `place` text COLLATE utf8_unicode_ci,
  `date` date NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `placeid` (`placeid`),
  KEY `stationid` (`stationid`),
  KEY `peopleid` (`peopleid`),
  KEY `deviceid` (`deviceid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ご覧のとおり、シリアルはNOT NULLに設定されています
が、次のようなクエリを実行すると

UPDATE DeviceList SET serial = NULL WHERE id = 1

出力します

1 row affected. ( Query took 0.0079 sec )

null を null 以外のフィールドに挿入するのはなぜですか?
エラーを発生させたい:D

///****************************** 編集


問題は sql_mode にあることが わかり ました
https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict経由


SET GLOBAL sql_mode='STRICT_ALL_TABLES'
4

2 に答える 2

2

今日は MySQL に夢中だったので、これについて学んだことを共有します。

MySQL 5.6 のデフォルトはNO_ENGINE_SUBSTITUTION.

MySQL 5.7のデフォルトONLY_FULL_GROUP_BYは 、、、、、、、STRICT_TRANS_TABLESです。NO_ZERO_IN_DATENO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERONO_AUTO_CREATE_USERNO_ENGINE_SUBSTITUTION

MySQL リファレンス マニュアルのこのページに記載されているように、

MySQL インストール プログラムは、インストール プロセス中に SQL モードを構成する場合があります。たとえば、mysql_install_dbは、ベース インストール ディレクトリにmy.cnfという名前のデフォルト オプション ファイルを作成します。

于 2016-10-20T05:13:39.493 に答える
0

エラーをスローする必要があります。質問に投稿したものは、実際のテーブル定義に対応していないと思いcreate tableます(構文エラーがあることを考慮してください-余分なコンマ)。

于 2013-03-05T20:34:21.773 に答える