我知道从nvarchar
转换为varchar
时,某些数据会丢失/更改。
但是,将varchar
数据类型转换为nvarchar
时是否存在数据更改的风险?
答案 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个字符 (不是字节)最大值。