将Varchar转换为NVarchar?

时间:2011-10-20 14:58:47

标签: sql sql-server-2008 varchar nvarchar sqldatatypes

我知道从nvarchar转换为varchar时,某些数据会丢失/更改。

但是,将varchar数据类型转换为nvarchar时是否存在数据更改的风险?

3 个答案:

答案 0 :(得分:6)

nvarchar存储的unicode字符是varchar字符大小的两倍。因此,只要您的nvarchar至少是vchar长度的两倍,这就不会有问题了。

如果您没有使用ASCII字符范围之外的任何字符(即您没有Unicode字符),仍然可以实现转换其他方式

简而言之,确保您的nvarchar长度是最大varchar值的两倍,然后进行更改。


由于我似乎收到了一些关于此的暗示(没有解释),我想明确指出,当我提到上面的长度时,我的意思是大小,例如需要的存储数据量。请注意我在下面的评论,我也将在此处添加:

  

如果您正在谈论使用SQL更改长度,那么我想你   应该可以有相同的长度。这是因为当你指定时   你根据字符数而不是字符数来做的长度   实际存储的数据量

答案 1 :(得分:3)

  

在大多数情况下,两种数据类型的方式完全相同   在SQL Server或应用程序中使用它们。该   区别在于nvarchar用于存储unicode数据,即   用于在数据库表中存储多语言数据。其他   语言有一组扩展的字符代码需要   已保存,此数据类型允许此扩展名。如果你的数据库   将不会存储您应该使用varchar的多语言数据   而是数据类型。原因是nvarchar需要两倍   作为varchar的空间很大,这是因为需要存储   其他语言的扩展字符代码。

(来自:http://weblogs.asp.net/guys/archive/2005/01/15/353550.aspx

因此,nvarchar是varchar的超集,因此转换时不应丢失数据。

答案 2 :(得分:1)

从这篇文章http://searchsqlserver.techtarget.com/tip/Differences-between-varchar-and-nvarchar-in-SQL-Server

  

VARCHAR存储为常规8位数据。但是NVARCHAR字符串是   以UTF-16存储在数据库中 - 每个字符16位或两个字节,   所有的时间 - 并转换为正在使用的任何代码页   输出上的数据库连接(通常为UTF-8)。那就是NVARCHAR   字符串与VARCHAR表兄弟有相同的长度限制 -   8,000个字节。但是,由于NVARCHAR每个都使用两个字节   字符,这意味着给定的NVARCHAR只能容纳4,000个字符   (不是字节)最大值。