【问题标题】:What are some real-world use of some unusual SQL Server data-types?一些不寻常的 SQL Server 数据类型在现实世界中的用途是什么?
【发布时间】:2012-01-31 21:42:03
【问题描述】:

以下 SQL Server 数据类型用于什么?

给我一​​些真实的例子。

  1. binary(50)varbinary(50)varbinary(max) 代替图片
  2. smallinttinyint 而不是 intbit
  3. varchar(50)varchar(max) 而不是 text
  4. sql_variant
  5. uniqueidentifier

【问题讨论】:

  • MSSQL 中类型的多样性是由于微软的“如果某个白痴想要它,我们就卖给他”的理念,将这个可怜的家伙绑在一个专有平台上。
  • @Philip:澄清你的偏见,你是“反MS”、“反礼节”还是“反非标准合规”?
  • @gbn:呵呵,我选择“anti-non-standards-compliance”,虽然我不会完全称我为“anti”。总是有标准不能提供足够选择的情况,但 IMO 的解决方案是扩展标准而不是引入自制解决方案。可悲的是,它通常以相反的方式工作,但即使这样,也可以同意自定义扩展被标记为这样,例如使用 CSS 扩展,其中一些供应商占用自己的命名空间,如 -moz-*-webkit-*。我很难想象删除部分界面是个好主意的场景。

标签: sql-server sqldatatypes


【解决方案1】:
  1. image is deprecated and also very limited (MSDN)
  2. 您无法将位与其他位进行比较。 tinyint/smallint:https://dba.stackexchange.com/a/4979/630
  3. 文本已被弃用且非常有限(如第 1 点)
  4. 一栏多语言支持:https://dba.stackexchange.com/a/10009/630
  5. 合并复制:https://stackoverflow.com/a/1164694/27535

【讨论】:

  • 4也常用于EAV场景。
  • EAV == 实体属性值
【解决方案2】:

1)

varbinarymax 代替图像

image 已弃用,因此您需要使用varbinary(max) 以确保与未来 SQL Server 版本的兼容性

2)

smallint 和 tinyint 而不是 int 和 bit

这是存储具有不同范围的数值的四种不同类型。这取决于您要保存在该列中的数据:

  • 如果只需要 0 和 1,请使用bit
  • 如果您需要不超过 0 到 255,请使用 tinyint
  • 如果您需要的值不超过 -32768 到 32768,请使用 smallint
  • 如果您需要更多,请使用int

当然,您可以将int 用于所有内容,但“更大”的类型也需要每行更多的空间。因此,如果您只需要 0 和 1 值,那么使用 int 列绝对没有意义,因为它只会不必要地扩大您的数据库。

3)

varchar(50) 和 varcharmax 代替文本

与 1 相同):text 已弃用,因此您需要使用 varchar(50)varchar(max) 以确保将来的兼容性(如果您的文本始终适合 50 个字符,则使用没有意义textvarchar(max) 反正)。

5)

唯一标识符

存储GUIDs

【讨论】:

  • @Saqib:我没有故意在回答中提到sql_variant,因为我对此一无所知(老实说,在阅读您的问题之前我从未听说过)。但是gbn's answer 中的链接对我来说看起来不错。
猜你喜欢
  • 2010-12-08
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2015-12-06
  • 2011-08-08
相关资源
最近更新 更多