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


当前回答

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.

其他回答

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列的话),因此可能预期的数据行量成为了这一决定的一部分。

如果使用单个字节存储字符,则有256种可能的组合,因此可以保存256种不同的字符。排序规则是一种模式,它定义了字符及其进行比较和排序的规则。

1252,即拉丁语1(ANSI),是最常见的。单字节字符集也不足以存储许多语言使用的所有字符。例如,一些亚洲语言有数千个字符,因此每个字符必须使用两个字节。

Unicode标准

当在网络中使用使用多个代码页的系统时,管理通信变得困难。为了实现标准化,ISO和Unicode联盟引入了Unicode。Unicode使用两个字节来存储每个字符。也就是说,可以定义65536个不同的字符,所以几乎所有的字符都可以被Unicode覆盖。如果两台计算机使用Unicode,每个符号都将以相同的方式表示,不需要转换-这就是Unicode背后的想法。

SQL Server有两类字符数据类型:

非Unicode(char、varchar和文本)Unicode(nchar、nvarchar和ntext)

如果我们需要保存来自多个国家的字符数据,请始终使用Unicode。

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

与varchar相比,nvarchar使用起来是安全的,因为nvarchar也允许unicode字符,所以我们的代码不会出错(类型不匹配)。当我们在SQL Server查询中使用where条件时,如果我们使用的是=运算符,它会多次抛出错误。可能的原因是我们的映射列将在varchar中定义。如果我们在nvarchar中定义它,这个问题就不会发生。尽管如此,我们还是坚持varchar并避免这个问题,我们最好使用LIKE关键字而不是=。

你说得对。nvarchar存储Unicode数据,而varchar存储单字节字符数据。除了您已经提到的存储差异(nvarchar需要两倍于varchar的存储空间)之外,更喜欢nvarchar而不是varchar的主要原因是国际化(即以其他语言存储字符串)。