2017-04-25 12 views
0

バイナリをやったとき、私は比較MySQLが等しいかどうか?

(予想通り)のMySQL

SELECT 1='1x'; 

でこれを見て困惑ビットは

SELECT 1='2x'; 

一方1

は私に0を与え、私を与えています

SELECT CAST(1 AS BINARY)=CAST('1x' AS BINARY); 

それは私に0を与えます

質問:私はこのような動作からMySQLを停止できますか?私は '='が100%のバイナリに相当するようにしたい。私は、MySQLが私が比較したいと思うものを想定したり推測したりしたくありません。

+0

値を文字列として入れないでください:https://dev.mysql.com/doc/refman/5.7/en/bit-value-literals.html。 –

答えて

4

文字列と数字を比較すると、MySQLは自動的に変換を行います。

したがって、文字列は数値に変換され、左から右に向かって開始され、数値を作成しようとします。

ので

'1x' => 1 
'x1' => 0 //because it does not start with a number on the left 

あなたはその動作を変更することはできません。とにかく、異なるデータ型を比較す​​るべきではありません。だからあなたのせいです:)

+0

これを明確にしていただきありがとうございます。私はこれを知らなかった。データベーススキーマで定義されているように、文字列を整数値と比較する必要があるのは初めてです。では、両方の値をバイナリ形式でキャストして安全な側にいるのですか?または、私が考慮する必要があるかもしれない警告がまだあります。 – Juergen

+0

'1 = '1x''の比較は単純に間違っています。片側に文字列があることが分かっている場合は、反対側の文字列と比較してください。 '' 1x '=' 1x'' –

関連する問題