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

时间:2013-04-19 06:11:33

标签: mysql sql database database-design informix

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

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

在存储2个2字节的unicode字符方面,每个字符使用4个字节。但是,当存储1个1字节ansi字符和1个2字节unicode字符时,NVARCHAR使用4个字节,而VARCHAR使用3个字节。

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

1 个答案:

答案 0 :(得分:2)

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

中的不同数据类型

* 1)在MSSQL中: 如果在VARCHAR列上有索引并将其显示为Unicode字符串,则MSSQL-Server不会使用该索引。当您将BigInt呈现给包含SmallInt的索引列时,会发生同样的情况。即使BigInt小到可以成为SmallInt,SQL-Server也无法使用索引。 另一种方法是没有这个问题(当将SmallInt或Ansi-Code提供给索引的BigInt ot NVARCHAR列时)。

* 2)知道每个数据库的数据类型略有不同,VARCHAR并不代表所有数据类型。虽然MSSQL有VARCHAR和NVARCHAR,但Apache / Derby数据库只有VARCHAR,而VARCHAR是Unicode。