【发布时间】:2010-10-10 09:03:22
【问题描述】:
您好,我想知道何时应该使用不同的数据类型。在我的表格中,我如何决定使用哪个:nvarchar、nchar、varchar、varbinary 等。
例子:
我会为 ... 列使用什么:
Phone number,
Address,
First Name, Last Name,
Email,
ID number,
etc.
感谢您的帮助!
【问题讨论】:
您好,我想知道何时应该使用不同的数据类型。在我的表格中,我如何决定使用哪个:nvarchar、nchar、varchar、varbinary 等。
例子:
我会为 ... 列使用什么:
Phone number,
Address,
First Name, Last Name,
Email,
ID number,
etc.
感谢您的帮助!
【问题讨论】:
作为一般规则,如果我不打算对其进行算术运算,我不会将任何内容定义为“数字”字段,即使数据本身是数字。
您的“电话”字段就是一个例子。我将其定义为 varchar。
【讨论】:
Varchar、Integer 和 Bit 覆盖了我 99% 的日常使用。
【讨论】:
这个问题真的取决于你的要求。我知道这不是一个特别令人满意的答案,但确实如此。
n..char 数据类型用于 Unicode 数据,因此如果您需要在数据中使用 unicode 字符集,您应该使用这些类型,而不是使用它们的“非 n”类似物。 nchar 和 char 类型是固定长度的,而 nvarchar 和 varchar 类型可以有可变长度,这将影响磁盘和内存中列的大小。一般来说,我会说使用磁盘空间最少但适合您需要的类型。
This page 具有指向 Microsoft 对 SQL Server 2005 的这些数据类型的描述的链接,其中许多提供了何时使用哪种类型的指针。您可能对 this page 对 char 和 varchar 类型特别感兴趣。
【讨论】:
以 n 开头的数据类型意味着它可以用于 unicode 字符...例如 nVarchar。
整数的选择也很有趣。
我最常用的数据类型是 varchar....
【讨论】:
N* 数据类型(NVARCHAR、NCHAR、NTEXT)用于 Unicode 字符串。它们占用的空间是其“普通”挂件(VARCHAR、CHAR、TEXT)所需空间的两倍,但它们可以存储 Unicode 而无需转换并且可能会丢失保真度。
TEXT 数据类型可以存储几乎无限量的数据,但它们的性能不如 CHAR 数据类型,因为它们存储在记录之外。
VARCHAR 数据类型是可变长度的。它们的末尾不会用空格填充,但它们的 CHAR 挂件会(一个 CHAR(20) 总是有 20 个字符长,即使只包含 5 个字母。剩下的 15 个将是空格)。
二进制数据类型适用于二进制数据,无论您想在其中存储什么(图像是主要示例)。
【讨论】:
其他人给出了很好的一般性答案,但我要补充一点:在使用 VARCHAR()s 时(我会推荐用于这些类型的字段),请务必使用足够大的长度以进行任何合理的操作价值。例如,我通常声明 VARCHAR(100) 代表姓名、电子邮件地址、域名、城市名称等,而 VARCHAR(200) 代表 URL 或街道地址。
这超出了您通常的需要。事实上,对于几乎所有这些值,30 个字符就足够了(除了全名,但一个好的数据库应该总是分开存储名字和姓氏),但总比将来必须更改数据类型要好。为VARCHAR 指定一个高于必要的长度几乎没有成本,但请注意VARCHAR(MAX) 和TEXT 确实需要大量开销,因此仅在必要时使用它们。
这里有一篇文章指出了一个超过必要的VARCHAR可能损害性能的情况:Importance of varchar length in MySQL table。这表明一切都是有代价的,但总的来说,我仍然倾向于长期VARCHARs。
【讨论】: