2016-04-12 4 views
0

これは本当に私が興味を持っているのか、これが本当にMySQL開発チームに提出する必要があるバグであるのか不思議です。Mysql Bug?反転0は矛盾しています

これらのクエリは、(彼らは読みにくいことができます)と同等である必要があります。do

true, false, true, false, true, false 

最初の2が、最後のリターン:私はこれらを返すことを期待する

SELECT !0, !!0, !!!0, !!!!0, !!!!!0, !!!!!!0; 
SELECT NOT 0, NOT NOT 0, NOT NOT NOT 0, NOT NOT NOT NOT 0, NOT NOT NOT NOT NOT 0, NOT NOT NOT NOT NOT NOT 0; 
SELECT !(0), !(!(0)), !(!(!(0))), !(!(!(!(0)))), !(!(!(!(!(0))))), !(!(!(!(!(!(0)))))); 

true, true, false, false, true, true 

誰でもこれを説明できますか?


誰か興味がある人は、私の疑問に由来しています。 0がfalseと1真として扱われているので、あなたは、フィールドを使用することができます - このように - それはbool_field呼び出すことができます:

SELECT * FROM something WHERE bool_field 

または

よく
SELECT * FROM something WHERE !bool_field 

、私は必ず何かがあるようにしたい場合ブール(総称していない言語固有の)として扱われ、それが価値だ反転したくない、私はこのように書く:本当に奇妙なパターンに、最終的に上記の質問に

SELECT * FROM something WHERE !!bool_field 

このリード。


MySQLのバージョンは、MySQLのバグレポートは、すでに6年前に...このために提出されている5.5.4

+0

最後に「1,0,1,0,1,0」が返されます。どのMySQLバージョンを使用していますか? – Quassnoi

+0

^^私もそうですが、最初は5.6.29で '1,1,0,0,1,1'を返します(sqlfiddle http://sqlfiddle.com/#!2/9eecb7d/1035でも5.5をチェックしています) –

+0

それは私のためにうまくいきます。あなたの結論は確かですか? – Fabricio

答えて

3
+0

いいえ、そのバグについて知りませんでした。実際には、複数の演算子を使用したクエリで見たいくつかの奇妙な結果が説明されています。 –

+0

私は、私たちのMySQLバージョンの後ろにいると思います。私はこの問題をどのように検索するのか分かりませんでした。答えに感謝します。 – Camway

0

MariaDBも

MariaDB [(none)]> SELECT !(0), !(!(0)), !(!(!(0))), !(!(!(!(0)))), !(!(!(!(!(0))))), !(!(!(!(!(!(0)))))); 
+------+---------+------------+---------------+------------------+---------------------+ 
| !(0) | !(!(0)) | !(!(!(0))) | !(!(!(!(0)))) | !(!(!(!(!(0))))) | !(!(!(!(!(!(0)))))) | 
+------+---------+------------+---------------+------------------+---------------------+ 
| 1 |  0 |   1 |    0 |    1 |     0 | 
+------+---------+------------+---------------+------------------+---------------------+ 
1 row in set (0.01 sec) 

MariaDB [(none)]> SELECT VERSION(); 
+---------------------+ 
| VERSION()   | 
+---------------------+ 
| 10.1.10-MariaDB-log | 
+---------------------+ 
1 row in set (0.00 sec) 
+0

実際には、 'SELECT!0、!! 0;' –

+0

とこれを試してください:-) - SELECT!0、! !0; –

+0

はい、スペースに違いがあります、私はGuidoの答えを説明しているバグは理由を説明しています:) –

0

私はMariaDB開発チームとのチャット持っており、彼らが私にこれを送って正常に動作します。

!0 = negate zero = 1. 
! !0 = negate (negate 0) = negate 1 = 0, 
!!0 = negate negate zero = is/like zero = 1.