0

我使用 ISO 3166-2 代码在我的数据库中指定州(许多国家,不仅仅是美国)。Code是我的表的主键,它被我的表的外键列States引用。StateCodeCities

据我所知,标准中有 5 个(like US-CA)和 6 个(like RU-SPE)符号长代码。

我应该更好地使用varchar(6)char(6)键入 SQL Server 中的列吗?

要使用的数据库服务器将是 SQL Server 2012 和 Azure。

访问数据的应用程序基于 ASP.Net 4.5 MVC 4 和 Entity Framework 5。

4

2 回答 2

4

CHAR(6)每个条目总是6 个字节- 无论您输入什么。

VARCHAR(6)将是7 个字节,5 个字符(5+2 开销),8 个字节,6 个字符。

任何低于大约 10 个字符的字符串,我通常会选择CHAR类型而不是 ,VARCHAR因为可变长度VARCHAR类型对于每个条目总是2 个字节的开销。

因此,如果您在这种情况下几乎只有 5 个和 6 个字符串,我建议您使用CHAR(6).

我建议VARCHAR您是否有更长的字符串,并且该字符串中实际存储文本的长度变化是否更大;例如,我不会将CHAR(256)其用于电子邮件地址 - 在这种情况下,使用VARCHAR(256)这些列中存储的电子邮件地址的长度会很重要,并且可变长度字符串的 2 字节开销并不重要与字符串中的 256 个字符相比,要多得多。

于 2012-12-26T10:39:33.607 回答
4

来自MSDN(有问题的页面适用于 SQL Server 2000,但仍应适用):

  • 当列中的数据值预计始终接近相同大小时,请使用char 。
  • 当列中的数据值的大小预计会有很大差异时,请使用varchar 。

我相信该建议是基于varchar需要额外的空间来存储字符串的长度,并且(可能)将字符串与表的其余部分分开存储,从而导致获取速度变慢。

希望有帮助!

于 2012-12-25T19:06:14.860 回答