哪个更好:在 NVARCHAR 或 VARCHAR 中存储包含 Unicode 字符的字符串? [复制]

Posted

技术标签:

【中文标题】哪个更好:在 NVARCHAR 或 VARCHAR 中存储包含 Unicode 字符的字符串? [复制]【英文标题】:Which is better: storing string including Unicode characters in NVARCHAR or VARCHAR? [duplicate] 【发布时间】:2013-04-19 06:11:32 【问题描述】:

我想存储包含 Unicode 字符的字符串。

我知道有两种选择。 NVARCHAR 和 VARCHAR。 NVARCHAR 使用 2 个字节来存储一个字符;但是 VARCHAR 对一个字符使用 1 个字节。

就存储 2 个 2 字节的 unicode 字符而言,它们每个使用 4 个字节。但是在存储 1 个 1 字节的 ansi 字符和 1 个 2 字节的 unicode 字符时,NVARCHAR 使用 4 个字节,而 VARCHAR 使用 3 个字节。

所以我认为使用 VARCHAR 更紧凑,并且始终是更好的方法。我不知道我上面的理解是否正确,因为 NVARCHAR 应该比 VARCHAR 有一些进步。

【问题讨论】:

AFAIK ,NVARCHAR 仅在您使用不同的排序规则并需要根据此信息进行排序时为您提供帮助。 【参考方案1】:

更小 => 更快。 但要注意索引和您提供的数据类型 *1。 并注意不同类型的数据库服务器中的不同数据类型 *2

*1) 在 MSSQL 中: 当您在 VARCHAR 列上有一个索引并将其呈现为 Unicode 字符串时,MSSQL-Server 不会使用该索引。当您将 Bi​​gInt 呈现给包含 SmallInt 的索引列时,也会发生同样的事情。即使 BigInt 小到足以成为 SmallInt,SQL-Server 也无法使用索引。 反过来,您就没有这个问题(向索引的 BigInt ot NVARCHAR 列提供 SmallInt 或 Ansi-Code 时)。

*2) 知道每个数据库的数据类型都略有不同,而 VARCHAR 并不意味着在所有地方都相同。 MSSQL 有 VARCHAR 和 NVARCHAR,而 Apache/Derby 数据库只有 VARCHAR,而 VARCHAR 是 Unicode。

【讨论】:

以上是关于哪个更好:在 NVARCHAR 或 VARCHAR 中存储包含 Unicode 字符的字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 连接中的 nvarchar 或 varchar 或日期

Oracle 中varchar varchar2 nvarchar2 有什么区别?

SQLSERVER中nvarchar和varchar类型的区别是啥?

SQL - UTF-8 到 varchar/nvarchar 编码问题

oracle修改varchar2或nvarchar2类型的时间字段为DATE

SQLSERVER中nvarchar和varchar类型的区别是啥?