3

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

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

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

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

4

1 回答 1

2

更小 => 更快。但要注意索引和您提供的数据类型 *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。

于 2013-04-19T07:36:17.180 回答