数値比較の癖: MySQL の驚くべき 'string' と 0 の評価
MySQL では、'string' を 0 と比較すると予期しない動作が発生します。 0. 論理的推論は誤った結果を示唆しますが、驚くべきことに真が得られます。この異常は、MySQL が比較中に文字列を数値に自動的にキャストすることに起因します。
文字列が数字で始まる場合、MySQL はそれを数値に変換します。ただし、数値接頭辞のない文字列は 0 として扱われます。したがって、'string' は 0 にキャストされ、0 との真の比較になります。
この動作は、文字列列が 0 と比較される例で明らかです。
select 'string' = 0 as res; -- res = 1 (true)
In対照的に、他の数値 (整数と小数の両方) との比較では、予想どおり false が返されます:
select 'string' = -12 as res; -- res = 0 (false) select 'string' = 3131.7 as res; -- res = 0 (false)
ただし、文字列として '0' を含む文字列の場合、結果は false になります:
select 'string' = '0' as res; -- res = 0 (false)
変換を強制するには、' ' のような演算子を使用できます:
select '0string' + 0 = 'string' AS res; -- res = 1 (true)
このクエリは、' 0string' は合計の前に数値に変換されます。続いて、「string」も数値に変換され、数値比較が行われます。
MySQL クエリでの予期しない結果を回避するには、このキャスト動作を理解することが重要です。文字列を数値に明示的に変換する演算子を活用することで、開発者は正確な比較を保証し、潜在的な誤解を避けることができます。
以上がMySQL が数値比較で「文字列」を 0 として扱うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。