0,NULL,空字符串,默认值 - MySql问题

Yos*_*sef 4 mysql database

  1. 请问布尔值false == 0和真正的== 1
  2. 请问在VARCHAR,INT,日期字段== 0值?
  3. 默认情况下,mysql值== 0或NULL或空字符串?

Mar*_*ers 7

MySQL内部没有bool值.看似返回布尔值的表达式实际上返回0或1的整数:

SELECT (3 < 5)
1

SELECT (3 > 5)
0

SELECT (3 < 4) + (4 < 5)
2

SELECT TRUE
1
Run Code Online (Sandbox Code Playgroud)

TRUE和FALSE只是1和0的别名.

NULL不等于任何值,甚至不是另一个NULL.

SELECT NULL = ''
NULL
SELECT NULL = NULL
NULL
Run Code Online (Sandbox Code Playgroud)

如果要与NULL比较使用IS NULL.


更新:MySQL是否支持布尔值存在一些混淆.此示例显示即使列上的BOOL类型仍然只是一个整数:

CREATE TABLE table1 (id INT, x BOOL);
INSERT INTO table1 VALUES
(1, TRUE),
(2, FALSE),
(3, 3);  -- Can you insert 3 into a BOOL type? Yep!
SELECT * FROM TABLE1;

结果:

id   x
1    1
2    0
3    3
Run Code Online (Sandbox Code Playgroud)