私は、7ビットのバイナリフィールドを含むBLOBフィールドを持っています。つまり、日曜日に右手ビットで始まる週の1ビットです。MySQLは、奇妙な結果を返すWHEREステートメントのビット単位
2つのレコードがあり、2つのフィールド(フラグ)は0101000に設定され、もう1つは0000010に設定されています。私はMac上でQueriousソフトウェアを使用してデータベース作業を行い、フィールドにはバイナリ上記のエントリを確認します。
ただし、WHEREステートメントでフラグ& 8 = 8を含むSELECTステートメントを発行すると、両方のレコードが返されますが、最初のステートメントのみが返されます。
bindec($ data-> flags)& 8を使用するPHPコードでは、最初のレコードが4番目のビット(つまり値8)が設定されているものとして正しくマークされます。
誰かが私がMySQLのステートメントに間違っていることをアドバイスすることができます - 私は36時間以上これを見てきました。
ありがとうございます - 実際のクエリははるかに大きなテーブルの一部ですが、私はこれを取り除きましたが、これは問題を引き起こしています。それは私がビット(7)ではなくBLOBに格納している可能性がありますか? Imは、Laravel 5.2の移行を使用してBITフィールドをBLOBとして設定するデータベースを作成します。 –
おそらく、はい、ブロブはバイトのシーケンスであるためです。 2つの値の各バイトが並列に比較されるように、文字列演算として扱われます。上記のBLOBフィールドをやり直すと、行が返されません。 –