协慌网

登录 贡献 社区

varchar 和 nvarchar 有什么区别?

只是nvarchar支持多字节字符吗?如果是这种情况,除了存储问题之外,使用varchars什么意义吗?

答案

nvarchar列可以存储任何 Unicode 数据。 varchar列仅限于 8 位代码页。有些人认为应该使用varchar因为它占用的空间更少。我相信这不是正确的答案。代码页不兼容性很痛苦,Unicode 可以解决代码页问题。现在有了廉价的磁盘和内存,实际上没有理由浪费时间来处理代码页了。

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

如果您与仅使用 ASCII 的应用程序连接,我仍然建议在数据库中使用 Unicode。操作系统和数据库整理算法将更好地与 Unicode 一起使用。 Unicode 避免了与其他系统连接时的转换问题。你将为未来做准备。您可以随时验证您的数据是否仅限于 7 位 ASCII,以用于您必须维护的任何遗留系统,即使在享受完整 Unicode 存储的一些优势的同时也是如此。

varchar :可变长度的非 Unicode 字符数据。数据库排序规则确定使用哪个代码页存储数据。

nvarchar :可变长度的 Unicode 字符数据。取决于数据库排序规则进行比较。

有了这些知识,请使用与输入数据匹配的任何一种(ASCII v.Unicode)。

我总是使用 nvarchar,因为它允许我正在构建的任何数据,以承受我投入的任何数据。我的 CMS 系统偶然会中文,因为我使用的是 nvarchar。如今,任何新应用程序都不应该真正关注所需的空间量。