关于选择数据类型

Ser*_*ity 2 sql t-sql sql-server types

如果在我的表中的一个列中我希望值为"是","否"或"可选",那么我需要使用哪种数据类型?

OMG*_*ies 9

BIT:

  • 需要1个字节,但最多8个BIT字段可以合并到SQL Server中的单个BYTE中.
  • 存储两个值中的一个:1(表示true)和0(表示false),因此列需要为空,以便NULL作为第三个值传递

CHAR(1)

  • 需要1个字节
  • 如果不区分大小写,则为26个字符,如果区分大小写,则为52

TINYINT

  • 需要1个字节
  • 值为0到255

性能

所有选项都占用相同的空间,使得性能等同于JOIN /等.

对照

BIT如果有可能改变价值,那么这不是最明智的选择. CHAR(1)可立即读取IE:Y,N,O. TINYINT是您希望通过外键关联的表中主键的不错选择,并将描述性文本存储在另一列中.

结论:

CHAR(1)如果不使用外键关系,将是我的选择,TINYINT否则.
使用CHAR(1),具有单个字符的自然主键是不太可能的.假设一个基于主角的自然键失败,如果你有两个以相同角色开头的单词,并且如果标签需要改变则会导致悲伤,因为键也应该改变并且永久存在(除非你是懒惰的并且像解释一样)为什么代码不遵循与其他代码相同的方案).CHAR(1)还提供了TINYINT所做的大约五分之一的可能性(假设上端,52个区分大小写的值) - 人工/代理键与描述变化隔离开来.

  • 实际上,BIT需要1个字节 - 但最多8个BIT字段可以合并到SQL Server中的单个BYTE中. (2认同)