sql - 关于选择数据类型

标签 sql sql-server tsql types

如果在我的表中的一列中,我希望值是 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/

相关文章:

sql - 如何查找组的行数?

sql - 数据库触发器比查询慢吗?

php - 使用 PHP 从 SQL 存储过程获取返回值

c# - 从 SQL Server 查询将数据导入 Excel

sql - T-SQL 中的最小/最大函数?

sql - 创建引用非索引 View 和来自多个数据库的对象的索引 View

sql - 在 join 中使用 distinct 关键字

mysql - 以特定方式在 MySQL 中存储值

sql - MS Access 2003 - 用于更新 SQL 查询的 VBA?

sql - 合并引发外键冲突