最近、Mysql が複数の値を返すという問題に遭遇し、最終的には、 mysqlのフィルター条件の質問です。
INT フィールド a があり、デフォルト値は 0 で、プログラムによって渡される判定条件は a = 'abacd' です。
入力は文字列であり、a=0 のすべてのデータが返されます。
Mysqlは論理判定を行うので、整数判定でも入力が文字列の場合、文字列が数値でない場合は文字列を0に変換します。したがって、
このコードで判断される実際の状態は a = 0 となります。
MySQL で論理的な判断を行う場合は、受信値がフィールド タイプと一致していることを確認する必要があります。つまり、整数フィールドは整数として判断され、文字列フィールドは整数として判断される必要があります。文字列として判断されます。複数のタイプにまたがる判断を行う必要がある場合、トラブルに巻き込まれないように、ビジネス ロジックに基づいて適切な調整を行う必要があります。
フィールド a が varchar 型で値が 0 の場合、同様の理由で a = 0 ではなく a='0' を判定に使用する必要があります。上記の場合、文字列は 0 に変換され、最終結果は 0 = 0 になります。
MySQLでは、データテーブルのフィールドがint型の場合、そのフィールドが0であるかどうかで判断でき、問題は発生しません。 char 型または varchar 型の場合は、「0」を使用する必要があります。明らかに、文字列と整数は等価ではありません。だから、そんな愚かな間違いをしないでください。
次は、インターネット上で見られる mysql 検索の原理です。
mysql は、まずフィールド値を整数に変換し、それから比較します。
フィールドの最初の桁が文字列の場合、整数に変換され、0 になります。
通常、文字列を検索する場合は引用符を追加する必要があります。
以上がMysqlにおける0値判定の落とし穴を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。