什么是一些不寻常的SQL Server数据类型的实际使用?
下列SQL Server数据类型用于什么?什么是一些不寻常的SQL Server数据类型的实际使用?
给我一些现实世界的例子。
-
binary(50)
,varbinary(50)
和varbinary(max)
代替图像 -
smallint
和tinyint
代替int
和bit
-
varchar(50)
和varchar(max)
代替text
sql_variant
uniqueidentifier
- image is deprecated and also very limited(MSDN)
- 不能与其他比较位。 TINYINT/SMALLINT:https://dba.stackexchange.com/a/4979/630
- 文本已被废弃,非常有限的(如点1)
- 多语言支持在一列:https://dba.stackexchange.com/a/10009/630
- 合并复制:https://stackoverflow.com/a/1164694/27535
'4'通常也用于EAV场景。 – 2012-01-02 15:15:06
EAV ==实体属性值 – anonymous 2012-01-02 21:13:29
1)
varbinarymax而不是图片
image
被弃用,因此,你需要使用varbinary(max)
,以确保未来的SQL Server版本
2)
SMALLINT和TINYINT,而不是INT兼容性和位
这四种不同类型的它存储具有不同范围的数值。这取决于数据要在该列保存:
- ,如果你只需要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个字符,那么无论如何使用text
或varchar(max)
都没有意义)。
5)
唯一标识符
要存储GUIDs
请讨论(4)。 – anonymous 2012-01-02 19:39:04
@Saqib:我在答案中没有提及'sql_variant',因为我对它没有任何了解(说实话,在我读你的问题之前,我从来没有听说过它)。但[gbn's answer](http://stackoverflow.com/a/8702375/6884)中的链接对我来说看起来相当不错。 – 2012-01-02 22:34:24
该品种在MSSQL类型是由于微软的理念,“如果有些白痴想它,我们把它卖给他。” ,将这个可怜的家伙绑在一个专有平台上。 – Philip 2012-01-02 15:09:04
@菲利普:为了澄清你的偏见,你是“反MS”,“反特性”还是“反非标准”? – gbn 2012-01-02 15:13:27
@gbn:呵呵,我选择了“反非标准合规”,但我不会完全称我为“反”。通常情况下,标准不能提供足够的选择,但IMO的解决方案是扩展标准,而不是引入自制解决方案。令人遗憾的是,它通常是反其道而行之,但即使如此,仍有可能认同自定义扩展标记是这样的,例如,带有CSS扩展,其中一些供应商在'-moz- *'和'-webkit- *'中占据了自己的名称空间。我几乎无法想象这是一个好主意去除*部分界面的场景。 – Philip 2012-01-02 15:25:43