Sql server Microsoft SQL Server中是否有与MySQL中相同的布尔数据类型?

Sql server Microsoft SQL Server中是否有与MySQL中相同的布尔数据类型?,sql-server,types,boolean,Sql Server,Types,Boolean,Microsoft SQL Server中是否有与MySQL中相同的布尔数据类型 如果是这样,MS SQL Server中的替代方案是什么?SQL Server使用位数据类型您可以在SQL Server中使用位数据类型来存储布尔数据。您可以使用位数据类型来表示布尔数据。位字段的值为1、0或null。使用位数据类型。在本机T-SQL中处理它时,它的值为1和0。您可能希望使用数据类型,可能设置为非NULL: 引述: 位(Transact-SQL) 一种整数数据类型,其值可以为1、0或NULL SQL

Microsoft SQL Server中是否有与MySQL中相同的布尔数据类型


如果是这样,MS SQL Server中的替代方案是什么?

SQL Server使用
数据类型

您可以在SQL Server中使用
数据类型来存储布尔数据。

您可以使用
数据类型来表示布尔数据。
字段的值为1、0或null。

使用
数据类型。在本机T-SQL中处理它时,它的值为1和0。您可能希望使用数据类型,可能设置为
非NULL

引述:

位(Transact-SQL)

一种整数数据类型,其值可以为1、0或NULL

SQL Server数据库引擎优化了位列的存储。如果表中有8位或更少的列,则这些列存储为1字节。如果有9到16位的列,则这些列存储为2个字节,依此类推

字符串值TRUE和FALSE可以转换为位值:TRUE转换为1,FALSE转换为0

您正在寻找
。它存储1或0(或
NULL
)。 或者,您可以使用字符串
'true'
'false'
代替1或0,如下所示-

declare @b1 bit = 'false'
print @b1                    --prints 0

declare @b2 bit = 'true'
print @b2                    --prints 1
此外,任何非0值(正数或负数)的计算结果都是(在某些情况下转换为)1

请注意,SQL Server使用三值逻辑(
true
false
NULL
),因为
NULL
位数据类型的可能值。以下是相关的真值表-

关于三值逻辑的更多信息-


SQL Server中存在布尔数据类型。其值可以是
TRUE
FALSE
未知
。但是,布尔数据类型只是包含以下组合的布尔表达式的结果:(例如,
=
=
)或(例如,
中的
存在
)。布尔表达式只允许出现在少数位置,包括子句、子句、a的
WHEN
子句或or流控制语句的谓词

对于所有其他用途,包括表中列的数据类型,布尔值是不允许的。对于那些其他用途,首选数据类型。它的行为类似于缩小的
整数
,只允许值
0
1
NULL
,除非进一步受到
非NULL
列约束或
检查
约束的限制

要在布尔表达式中使用
列,需要使用比较运算符(如
=
为NULL)对其进行比较。e、 g

SELECT
    a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;
从格式化角度来看,
值通常在客户端软件中显示为
0
1
。当需要更为用户友好的格式,并且无法在数据库前面的应用层处理时,可以使用
CASE
表达式“即时”转换,例如

SELECT
    a.answer_body,
    CASE a.is_accepted WHEN 1 THEN 'TRUE' ELSE 'FALSE' END AS is_accepted
FROM answers AS a;
也可以将布尔值存储为字符数据类型,如
char(1)
varchar(5)
,但这不太清楚,存储/网络开销更大,需要
检查每列上的约束以限制非法值

作为参考,
答案
表的模式类似于:

CREATE TABLE answers (
    ...,
    answer_body nvarchar(MAX) NOT NULL,
    is_accepted bit NOT NULL DEFAULT (0)
);

我使用
TINYINT(1)
数据类型在SQL Server中存储布尔值,尽管
BIT
非常有效

使用
BIT
数据类型表示布尔数据。
字段的值为1,0或NULL

create table <tablename> (
    <columnName> bit
)
创建表(
一点
)
除非需要三向布尔值,否则应添加NOT NULL默认值0,如下所示:

create table <tablename> (
    <columnName> bit not null default 0
)
创建表(
位不为空默认值0
)

此外,标准做法是将0解释为FALSE,将1解释为TRUE,如果允许,NULL将反映为NULL。请注意,
并不等同于布尔值。如果标量函数返回一个
,则仍然需要测试它是0还是1。例如,dbo.IsReturnsBit(value)=1这样做的唯一缺点是它对用户不是特别友好。例如,我正在显示一个sql表的datagrid,我希望用户能够查看/编辑true或false,而不是1或0。@crclayton您可以有一个关联计算列,该列为1返回true,为false返回0。其他选项是对报告使用转换。当然,这假设您的典型用户不会看到这一点,他们不是习惯于0/1系统的程序员。是否
true
false
不是非零值?@Malachi a零被视为false,非零值被视为true。但true的计算结果为1,false的计算结果为0。例如,声明@b位=-9;如果@b=1,则打印“通过”-注意位是如何设置为-9的,但隐式转换为1(which=“true”)并通过了if测试。值得注意的是,此方法会增加额外的开销,因为SQL将分别将“true”或“false”转换为1或0。@NathanielBendinsky yes,如果涉及任何类型转换,则会产生开销(但不仅仅是在这种情况下…)。我只是想指出,直接使用True/False是可能的。但是,是的,只使用1和0更有效。位实际上不是布尔等价物,因为不能将布尔表达式指定给位列。真正的支持将处理逻辑运算符对位字段的直接赋值,例如x=y和z。我最喜欢你的答案,因为你明确指出了这一点。事实上,MySQL没有
布尔数据类型
create table <tablename> (
    <columnName> bit not null default 0
)