web-dev-qa-db-ja.com

mysqlクエリブラウザーでブールデータ型を追加するにはどうすればよいですか?

MysqlワークベンチでEDIT TABLEを使用してBOOLEAN列を追加しようとしていますが、変更を適用すると自動的にTINYINTに変更されます。

列をBOOLEANにするにはどうすればよいですか?

4
yukti

BOOLおよびBOOLEANは、MySQLのTINYINTの同義語です。 MySQLのドキュメントを参照してください: 数値タイプの概要

おそらく BIT データ型を使用したいでしょう。

9
ypercubeᵀᴹ

MySQLは標準SQLのように真のブール値をサポートしていません。これは、trueとfalseにそれぞれ整数値1と0を使用します。キーワードtrueおよびfalseはサポートされますが、これらは整数値にマップされます。

_mysql> SELECT true, false;
+------+-------+
| TRUE | FALSE |
+------+-------+
|    1 |     0 |
+------+-------+
_

それらは実際には整数にマッピングされています:

_mysql> SELECT true + 10;
+-----------+
| true + 10 |
+-----------+
|        11 |
+-----------+
_

これは、特定の式がMySQLでより単純であることを意味します。たとえば、特定の値がtrueである行のカウントは、ブール式のSUM()と同じくらい簡単です。これは、条件がtrueの場合は1、それ以外の場合は0になります。

_SELECT SUM(name = 'bill') FROM table;
_

標準SQLでは、ブール値の整数としての使用はサポートされていないため、より詳細な情報が必要になります。

_SELECT COUNT(CASE name WHEN 'bill' THEN 1 END) FROM table;
_

他の回答ですでに述べたように、データ型エイリアスBOOLを使用できますが、すぐにTINYINT(1)に置き換えられます(MySQLはREALのような他のデータ型と同じようなことをしますおよびSERIAL)。

5
Bill Karwin

Mysqlではブールは使用できません。Mysqlではテーブルを作成するときに変換されるのはTinyintなので、ブールを「作成」してブール値として使用できますが、これはtinyintです。

jcho360> create table bool_test (bool_field bool);
Query OK, 0 rows affected (0.04 sec)

jcho360> show create table bool_test \G
*************************** 1. row ***************************
       Table: bool_test
Create Table: CREATE TABLE `bool_test` (
  `bool_field` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

私がboolとして作成したbool_fieldとmysqlはtinyint(1)としてそれを置きました。

trueまたはfalseに設定する場合、プログラミングの世界では1はtrue、0はfalseです。

あなたは1と0で条件文を作ることさえできます、

if (bool_field){

code here //and if bool_field is 1, it will be the same as bool_field=true

}
2
jcho360