答案 0 :(得分:7)
MySQL内部没有bool值。看似返回布尔值的表达式实际上返回0或1的整数:
SELECT (3 < 5)
1
SELECT (3 > 5)
0
SELECT (3 < 4) + (4 < 5)
2
SELECT TRUE
1
TRUE和FALSE只是1和0的别名。
NULL不等于任何值,甚至不等于另一个NULL。
SELECT NULL = ''
NULL
SELECT NULL = NULL
NULL
如果要与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
答案 1 :(得分:4)
问题:bool值为false == 0和true == 1
是 - 您可以使用以下方式进行测试:
SELECT IF(0, 'true', 'false')
...它将返回“false”,表示0表示false,1表示true。此示例取自MySQL documentation page。
问题:varchar,int,date fields中的Null值== 0?
不,NULL表示缺少任何值。
如果要比较值为NULL,则需要使用特殊运算符。
问题:默认情况下,mysql值== 0或NULL或空字符串?
如果没有默认约束,如果没有提供任何值,则允许NULL的列将包含NULL - 无论数据类型如何(DATETIME,数字,文本等)。不允许NULL的列将返回错误,直到提供与列的数据类型匹配的值。默认约束允许您指定一个默认值,如果有人试图将NULL值插入列中,或者该列已从INSERT语句中省略。
答案 2 :(得分:1)
在SQL中,NULL表示缺少值。在MySQL中,显式NULL也可以表示伪序列的下一个值,而隐式NULL可以表示由MySQL确定的隐式默认值(零或空字符串)。