sql >> データベース >  >> RDS >> Mysql

デフォルト以外のすべてのフィールドを指定せずにMySQLINSERT(#1067-'table'のデフォルト値が無効)

    サーバーの1つはデフォルトで厳密モードで実行されており、もう1つはそうではありません。サーバーが厳密モードで実行されている場合(または接続でサーバーを設定している場合)、NOTNULLとして定義された列にNULL値を挿入しようとすると次のようになります。 #1364エラー。 strictモードがないと、NULL値は空の文字列または0に置き換えられます。

    例:

    CREATE TABLE `test_tbl` (
     `id` int(11) NOT NULL,
     `someint` int(11) NOT NULL,
     `sometext` varchar(255) NOT NULL,
     `somedate` datetime NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    SET sql_mode = '';
    INSERT INTO test_tbl(id) VALUES(1);
    SELECT * FROM test_tbl;
    +----+---------+----------+---------------------+
    | id | someint | sometext | somedate            |
    +----+---------+----------+---------------------+
    |  1 |       0 |          | 0000-00-00 00:00:00 |
    +----+---------+----------+---------------------+
    SET sql_mode = 'STRICT_ALL_TABLES';
    INSERT INTO test_tbl(id) VALUES(2);
    #1364 - Field 'someint' doesn't have a default value 
    


    1. 毎日発生しないイベントの毎日のカウントを取得する

    2. mysql_fetch_arrayはすべての行を追加しますか?

    3. ユーザーのログインを維持するためのPHPCookie-これは十分に安全ですか?

    4. MySQL:定義された行が同じ場合は、新しい行を挿入しないでください