2017-06-09 12 views
0

なぜNULL値をMYSQLのINTと比較すると、MYSQLはNULLを '0'に変換しますか?私はMYSQLに代わってこの恐ろしい事故のために数時間の睡眠とデバッグを失いました。なぜMYSQLはNULL値か文字列値をint値と比較すると0に変換しますか?

EDIT

例:私はクライアントからのポストの入力から値を取得し、その入力が設定されていない場合、私はNULLとしてそのフィールドを設定する必要があり、私は0または任意の他のint型の値として設定されている場合ので、私はdbの実際の記録を打つかもしれない。それを他のNON-INT値に設定すると、MYSQLは比較時に0に変換します。

+0

'null安全比較 '演算子をテストしましたか? '='の代わりに '<=>'を意味しますか? – NDFA

+1

実際のコード例はありませんが、[manual] [1]によると、NULLを含む数学演算は常にNULLになり、NULLを含む論理演算は常にNULLを "false"またはINTとして扱うべきです0.コード例を教えてもらえますか? [1]:https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html – JBH

+0

あなたの権利は@JBHです。私の編集をお読みください。ありがとう。 – Dave2345

答えて

2

あなたcannot use relational operators with NULL。 NULLで動作する唯一の演算子は、IS NULLとIS NOT NULLです。

null safe comparison operatorINTとを比較すると、あなたのケースに適していない場合は、NULLの別の小切手を含める必要があります。

0

NULLは本当に特別な価値があります。

あなたはcolumnと呼ばれるintデータ型を持つ列を持っている場合は、

 `column` = NULL 

決してでもcolumnNULLに設定された行について、バック叶います。どちらもありません。

 `column` <> NULL 

ヌルを含まない列の場合はこれまでどおりに戻ってきます。 nullを探す場合は、IS NULLを使用する必要があります。

MySQLでは、文字列を整数に強制的に(暗黙的にキャストして)、先頭の数字が整数であるかのように解釈します。しかし、NULLが含まれている場合は、結果もNULLになります。だから、

select 0 + 'abcde', 0 + '99abced', 0+NULL 

は、結果として099、NULL整数値を示します。

関連する問題