如何在SQL Server中创建一个是/否布尔字段?

414

在转换来自Access数据库或其他情况下创建yes/no,即Boolean字段的最佳实践是什么?

13个回答

556

相当于一个 BIT 字段。

SQL 中,您使用01来设置位字段(就像在Access中的是/否字段一样)。在 Management Studio 中,它显示为 false/true 值(至少在最近版本中)。

通过ASP.NET访问数据库时,它将以布尔值公开该字段。


4
如果你在Access数据库中链接表格,true的值将为-1,false的值将为0。至少是在Access 2003版本中。(这是我手头有的版本,连接到客户的MSSQL数据库)。 - Henrik Erlandsson
3
请注意,这并不完全等同。如果标量函数返回一个二进制数,则仍需要测试其是否为0或1。例如,如果dbo.IsReturnsBit(value) = 1,则表示其返回了true。 - Darren Griffith
@D-Money:是的,但如果你想在条件语句中使用该值,那么你只需要进行比较。如果你想在结果中使用该值,那么就不应该进行比较。 - Guffa
1
在 Re Mgt Studio 中,如果你正在复制粘贴数据,你需要将它设置为 True / False,而不是 1 或 0。 - gorlaz
那么,尺寸呢?它真的比tinyint或char(1)还要小吗? - Zhang
1
@张,如果在该表中有多个位字段,那么它将会更小 - 这样你就可以将多个位字段放入一个字节中。如果每个表只有一个BIT字段,那么它与tinyint相同。 - userfuser

133

BIT 数据类型通常用于存储 boolean 值(0 表示 false1 表示 true)。


1
你是否担心位和布尔值的语义不同? - Darth Egregious

27

您可以使用bit列类型。


24

您可以使用BIT字段。

要向现有表添加BIT列,SQL命令如下:

ALTER TABLE table_name ADD yes_no BIT

如果想创建新表,可以执行以下命令:CREATE TABLE table_name (yes_no BIT)


22

已经有答案说使用bit。我会在这些答案上添加更多内容。

应该使用bit来表示布尔值。

MSDN文章中的备注。

位可以取1、0或NULL的值。

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

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

将其转换为位可将任何非零值提升为1。

参考资料

注意:最好将值保留为数据类型NOT NULL的1和0

因为位拥有值1、0和NULL。请参阅此真值表。因此,请相应地规划值。允许位数据类型的NULL值可能会增加混淆。

enter image description here

参考资料


位可以取值为1、0或NULL。如果位数据类型允许空值,那么我在字段定义中就不必指定NULL了吗?这个定义让我觉得 [field1] [bit] NULL[field1] [bit] 相等? - spencer741

21

您可以使用数据类型bit

插入大于0的值将被存储为'1'

插入小于0的值将被存储为'1'

插入值为'0'的将被存储为'0'

这适用于MS SQL Server 2012 Express


3
这是大多数语言的通用行为。0表示假,任何非0数字表示真。过去,将-1作为真的默认值也很常见,因为在有符号二进制中,每个位都设置为1。现在,将1作为真的默认值非常普遍(只设置了最低有效位)。 - CJ Dennis

18

创建表时的示例用法:

[ColumnName]     BIT   NULL   DEFAULT 0

1
根据@Somnath Muluk的回答,允许在此列中使用null值是否会造成潜在的混淆?因为值可以是1、0或null。 - jslatane

15
你可以使用BIT字段。 创建新表:
CREATE TABLE Tb_Table1
(
ID              INT,
BitColumn       BIT DEFAULT 1
)

在现有表格中添加列:

ALTER TABLE Tb_Table1 ADD BitColumn  BIT DEFAULT 1

插入记录:

INSERT Tb_Table1 VALUES(11,0)

10

比特 (bit) 是最简单的并且占用空间最少的。与“Y/N”相比不够冗长,但我认为这样也可以。


4
我认为最好的方式是,不需要担心 Y == y 和 N = n 的问题,只需纯粹地使用 true 或 false。意图非常明显,并且没有单个字符字段所引起的“特殊”情况 :) - Rob Grant

6

bit 是最合适的选项。否则我曾经用过 int 来实现这个目的。使用 1 表示 true,使用 0 表示 false


2
通常情况下,0表示False,非零表示True。 - Edu
3
有很多种口味,或者说是一个好的政客 :D - Buda Florin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接