如果在我的表中的一列中,我希望值是 Yes、No 或 Optional,那么我需要使用什么数据类型?
最佳答案
比特:
- 占用 1 个字节,但在 SQL Server 中最多可以将 8 个 BIT 字段合并为一个 BYTE。
- 存储两个值之一:1(表示真)和 0(表示假),因此该列需要可以为空,以便 NULL 作为您的第三个值传递
字符(1)
- 占用1个字节
- 26 个字符(如果不区分大小写 ASCII 与 52 个字符(如果区分大小写)
微积分
- 占用1个字节
- 值为 0 到 255
性能
所有选项占用相同的空间量,使 JOINs/etc 的性能等效。
比较
BIT
如果可能的值有可能发生变化,则不是最明智的选择。 CHAR(1)
立即可读,即:Y、N、O。TINYINT
是您希望通过外键关联的表中主键的不错选择,并且将描述性文本存储在另一列中。
结论:
如果不使用外键关系,我会选择CHAR(1)
,否则会选择 TINYINT
。
使用 CHAR(1) 时,自然主键是单个字符的可能性很小。如果您有 2 个以上以相同字符开头的单词,假设基于前导字符的自然键失败,并且如果标签需要更改会导致悲伤,因为键也应该更改并永久存在(除非您懒惰并且喜欢解释为什么代码不遵循与其他代码相同的方案)。 CHAR(1) 还提供了 TINYINT 所做的大约五分之一的可能性(假设上限为 52 个区分大小写的值)——人工/代理键与描述更改隔离。
关于sql - 关于选择数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4282462/