回答編集履歴

3

誤記を訂正、コメントを追加しました。

2023/04/06 20:39

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -1,4 +1,4 @@
1
- 手元に、Fedora 37MariaDBしかないので、試した結果を書きます。
1
+ 手元に、Fedora 37/MariaDBしかない(他にMySQLがインストールされたPCがない)ので、試した結果を書きます。
2
2
 
3
3
  **値の範囲**
4
4
  - bit(1) 0,1
@@ -34,7 +34,7 @@
34
34
 
35
35
  **三値論理**
36
36
 
37
- boolean列がnullableなので三値論理は適用されると思います。独自に判定したければ以下のようにします。
37
+ boolean列がnullableな三値論理は適用されると思います。独自に判定したければ以下のようにします。
38
38
 
39
39
  - false : 0
40
40
  - unknown : 0.5
@@ -43,5 +43,10 @@
43
43
  ```sql
44
44
  a or b = max(a,b)
45
45
  a and b = min(a,b)
46
- not a = abs(1 - a)
46
+ not a = 1 - a
47
47
  ```
48
+
49
+ **is null/is true**
50
+
51
+ 最後に、`is null`の存在理由は明らかですが`is true | false`の存在理由は不明です。
52
+

2

コメントとすべき内容を追記

2023/04/06 10:43

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -26,7 +26,22 @@
26
26
  - bit(1) は0,1しか格納できないので好ましい
27
27
  ただしbit(1)はSELECTで表示されない。cast(<列> as unsigned)する
28
28
  - boolean/tinyintは、制約を付加して0,1限定で使う
29
+ booleanの解釈に注意が必要
29
30
 
30
31
  **整数型**
31
32
 
32
33
  他の整数型でも、`= true | false`、`<> true | false`、`is true | false`、`is not true | false` は使えるようです。
34
+
35
+ **三値論理**
36
+
37
+ boolean列がnullableなので三値論理は適用されると思います。独自に判定したければ以下のようにします。
38
+
39
+ - false : 0
40
+ - unknown : 0.5
41
+ - true : 1
42
+
43
+ ```sql
44
+ a or b = max(a,b)
45
+ a and b = min(a,b)
46
+ not a = abs(1 - a)
47
+ ```

1

-128 - 127 に訂正

2023/04/06 09:31

投稿

xebme
xebme

スコア1083

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **値の範囲**
4
4
  - bit(1) 0,1
5
- - boolean / tinyint -127 〜 128
5
+ - boolean / tinyint -128 〜 127
6
6
 
7
7
  **DML**
8
8
  where の条件次第では、booleanやtinyintは問題が起きます。