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


当前回答

我的两分钱

如果不使用正确的数据类型,索引可能会失败:在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的。

其他回答

nvarchar列可以存储任何Unicode数据。varchar列限制为8位代码页。有些人认为应该使用varchar,因为它占用更少的空间。我认为这不是正确的答案。代码页不兼容性是一个难题,Unicode是解决代码页问题的良方。现在磁盘和内存都很便宜,真的没有理由再浪费时间摆弄代码页了。

所有现代操作系统和开发平台都在内部使用Unicode。通过使用nvarchar而不是varchar,可以避免每次读取或写入数据库时进行编码转换。转换需要时间,而且容易出错。从转换错误中恢复是一个非常重要的问题。

如果您使用的是仅使用ASCII的应用程序,我仍然建议在数据库中使用Unicode。操作系统和数据库排序算法将更好地使用Unicode。Unicode在与其他系统接口时避免了转换问题。你将为未来做准备。您可以始终验证您的数据是否仅限于7位ASCII,无论您要维护的是什么遗留系统,即使您享受完全Unicode存储的一些好处。

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

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

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

varchar适用于存储非unicode,这意味着有限的字符。虽然nvarchar是varchar的超集,所以我们可以使用varchar存储哪些字符,但我们可以在不忽略函数的情况下存储更多字符。

有人评论说,现在存储/空间不是问题。即使空间不是一个问题,确定最佳数据类型也应该是一项要求。

这不仅仅是关于存储!“数据移动”,你就知道我要去哪里了!

Varchar(n)和nvarchar(n)之间的主要区别是:

Varchar(可变长度,非Unicode字符数据)大小最大为8000。

它是可变长度数据类型用于存储非Unicode字符每个字符占用1字节的空间

Nvarchar:可变长度Unicode字符数据。

它是可变长度数据类型用于存储Unicode字符。数据以Unicode编码存储。每一个支持语言。(例如阿拉伯语、德语、印地语等)