MysqlワークベンチでEDIT TABLEを使用してBOOLEAN
列を追加しようとしていますが、変更を適用すると自動的にTINYINT
に変更されます。
列をBOOLEAN
にするにはどうすればよいですか?
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
)。
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
}