空の文字列
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フィールドにしてから、フィールドに制約を設定して、''
を防ぐことです。 挿入されないようにします。 強く これに反対することをお勧めします。