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

时间:2010-07-03 21:47:09

标签: mysql database

  1. bool 值false == 0和true == 1
  2. varchar,int,date fields中的 Null 值== 0?
  3. 默认情况下,mysql值== 0或NULL或空字符串?

3 个答案:

答案 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确定的隐式默认值(零或空字符串)。