1

数値を VARCHAR フィールドと比較するのは愚かな考えであり、比較すべきではないことはわかっていますが、その理由を理解したいだけです。

次のスキーマを持つテーブルがあります。

Table: user
--------------------
number varchar(24)

ストレージ エンジンとして MyISAM を使用しています。

数値フィールドには、数値 ('9999999' など) と文字列 ('signup' など) の混合データが含まれています。

次のクエリを実行しようとしています。

SELECT * FROM user where number=0

ただし、数値フィールドに「signup」などの文字列値または空の数値フィールドが含まれているすべての行を返します。

次のクエリを実行すると..

SELECT * FROM user where number=1 or SELECT * FROM user where number=97654

どの行もその番号フィールドに 1 または 97654 の値を持っていないため、行は返されません。

誰かが mysql が 0 を varchar フィールドと比較する方法を理解するのを手伝ってくれますか?

4

2 に答える 2

2

MySQL は暗黙的に文字列を整数に変換するため、 signupおよびその他の空の値が返されます。文字列が無効であるか、intに変換できない場合、値は0であるため、返されます。

于 2013-10-11T07:42:05.243 に答える
2

数値が数値に変換できない、または文字列「0」であるすべてのエントリを返します。これは、比較によって事前に varchar が int に変換され、結果として値が 0 になるためです。

説明書にわかりやすく書いてあります

実際の比較のために、以下のクエリを使用できます

SELECT * FROM user where CAST(`number` AS SIGNED) = 1
于 2013-10-11T07:43:23.693 に答える