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

MySQL列をNOTNULLに設定しましたが、それでも空の値を挿入できます

    空の文字列

    ORACLEでは、空の文字列を使用して表現します。 ヌル。ただし、他のほとんどすべての場合、空の文字列は依然として文字列であるため、NULLではありません。


    INTS

    あなたの場合、実際にはSTRINGSをINT列に挿入しています。これにより、暗黙的が強制されます CAST操作。

    RDBMSが文字列''を変換しているとき INTに対しては、値0を取得する必要があります。0はNULLではないため、これが挿入されます。

    より有効なテストは次のとおりです。

    INSERT INTO `plekz`.`countries` (`Column1 ` , `Column2`)
    VALUES (66, NULL);
    


    編集

    申し訳ありませんが、私はあなたの質問を半分しか読んでいません。 ''を停止する方法も尋ねます 挿入されています。

    最初の問題は、STRINGSを挿入していて、テーブルがINTフィールドを持つものとして定義されていることです。挿入されるデータに制約を設定できますが、これらの制約は値 afterを適用します INTへの変換。値0を防ぎたい場合を除いて このシナリオを防ぐためにテーブルに対してできることは何もありません。

    あなたのより良い賭けは、そもそもなぜ文字列を挿入しているのかを説明することです。文字列をINTに変換して挿入する前に、文字列を取得してチェックするストアドプロシージャを使用できます。または、さらに良いことに、クライアントアプリケーションでチェックを行うことができます。

    技術的に利用可能なオプションは、フィールドをCHARフィールドにしてから、フィールドに制約を設定して、''を防ぐことです。 挿入されないようにします。 強く これに反対することをお勧めします。



    1. MySQLTCP接続

    2. MySQL Update Incremented(Auto-Incrementedではない)列の値

    3. MysqlのWHERE句のファイル名は何も返しません

    4. mysql2 gemが原因で、バンドル更新を実行できません