ホームページ > データベース > mysql チュートリアル > MySQL が数値比較で「文字列」を 0 として扱うのはなぜですか?

MySQL が数値比較で「文字列」を 0 として扱うのはなぜですか?

DDD
リリース: 2024-12-10 16:10:11
オリジナル
217 人が閲覧しました

Why Does MySQL Treat 'string' as 0 in Numeric Comparisons?

数値比較の癖: 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート