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


当前回答

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

其他回答

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

主要是nvarchar存储Unicode字符,varchar存储非Unicode字符。

“Unicodes”是指16位字符编码方案,允许来自许多其他语言(如阿拉伯语、希伯来语、汉语、日语)的字符在单个字符集中编码。

这意味着unicode使用每个字符2个字节来存储,而非unicode使用每字符一个字节来进行存储。这意味着与非unicode相比,unicode需要双倍的存储容量。

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

我的两分钱

如果不使用正确的数据类型,索引可能会失败:在SQL Server中:当您在VARCHAR列上有一个索引并将其呈现为Unicode字符串时,SQL Server不会使用该索引。当您向包含SmallInt的索引列提供BigInt时,也会发生同样的情况。即使BigInt小到可以成为SmallInt,SQL Server也无法使用索引。另一方面,您没有这个问题(当向索引的BigInt或NVARCHAR列提供SmallInt或Ansi代码时)。不同DBMS(数据库管理系统)的数据类型可能有所不同:要知道,每个数据库都有稍微不同的数据类型,VARCHAR并不意味着所有地方都是相同的。虽然SQL Server有VARCHAR和NVARCHAR,但Apache/DDerby数据库只有VARCHAR,而VARCHAR是Unicode的。

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

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