只是nvarchar支持多字节字符吗?如果是这样的话,除了存储问题之外,使用varchars真的有什么意义吗?


当前回答

我看了一下答案,许多人似乎建议使用nvarchar而不是varchar,因为空间不再是问题,所以启用Unicode以获得很少的额外存储不会有什么害处。嗯,当你想在列上应用索引时,这并不总是正确的。SQL Server对可以索引的字段的大小限制为900字节。因此,如果您有一个varchar(900),您仍然可以对其进行索引,但不能对varchar(901)进行索引。使用nvarchar,字符数减半,因此可以索引到nvarchar(450)。因此,如果您确信不需要nvarchar,我不建议使用它。

一般来说,在数据库中,我建议您坚持所需的大小,因为您可以随时扩展。例如,一位同事曾经认为,对列使用nvarchar(max)没有害处,因为我们在存储方面完全没有问题。后来,当我们试图对此列应用索引时,SQL Server拒绝了这一点。然而,如果他甚至从varchar(5)开始,我们可以简单地将其扩展到我们需要的内容,而不会出现这样的问题,这将要求我们制定一个字段迁移计划来解决这个问题。

其他回答

varchar仅用于非Unicode字符,而nvarchar用于Unicode和非Unicode字符。下面给出了它们之间的一些其他差异。

VARCHAR与NVARCHAR

VARCHAR NVARCHAR
Character Data Type Variable-length, non-Unicode characters Variable-length, both Unicode and non-Unicode characters such as Japanese, Korean, and Chinese.
Maximum Length Up to 8,000 characters Up to 4,000 characters
Character Size Takes up 1 byte per character Takes up 2 bytes per Unicode/Non-Unicode character
Storage Size Actual Length (in bytes) 2 times Actual Length (in bytes)
Usage Used when data length is variable or variable length columns and if actual data is always way less than capacity Due to storage only, used only if you need Unicode support such as the Japanese Kanji or Korean Hangul characters.

nArchar将帮助您存储Unicode字符。如果您想存储本地化的数据,这是一种方法。

遵循Sql Server VARCHAR和NVARCHAR数据类型之间的差异。在这里,你可以看到一个非常描述性的方式。

一般来说,varchar将数据存储为Unicode,因此,如果要在数据列中存储多语言数据(多种语言),则需要N变量。

Jeffrey L Whitledge推荐使用nvarchar,评分约47000

Solomon Rutzky的声誉评分约为33200,建议:不要总是使用NVARCHAR。这是一种非常危险且代价高昂的态度/方法。

varchar和nvarchar SQL Server数据类型之间的主要性能差异是什么?

https://www.sqlservercentral.com/articles/disk-is-cheap-orly-4

两人都享有如此高的声誉,学习型sql server数据库开发人员会选择什么?

如果您的选择不一致,在回答和评论中会有很多关于性能问题的警告。

有关于性能的评论pro/con nvarchar。

有关于性能的评论pro/con varchar。

我对具有数百列的表有一个特殊的要求,这本身可能是不寻常的?

我选择varchar是为了避免接近SQL*服务器2012的8060字节表记录大小限制。

对我来说,nvarchar的使用超过了8060字节的限制。

我还认为应该将相关代码表的数据类型与主中心表的数据匹配。

我曾在南澳大利亚州政府的这个工作场所看到过有经验的数据库开发人员使用varchar列,其中表行数将达到数百万或更多(在这些非常大的表中,如果有nvarchar列的话),因此可能预期的数据行量成为了这一决定的一部分。

Varchar(n)和nvarchar(n)之间的主要区别是:

Varchar(可变长度,非Unicode字符数据)大小最大为8000。

它是可变长度数据类型用于存储非Unicode字符每个字符占用1字节的空间

Nvarchar:可变长度Unicode字符数据。

它是可变长度数据类型用于存储Unicode字符。数据以Unicode编码存储。每一个支持语言。(例如阿拉伯语、德语、印地语等)