我知道从 转换为nvarchar
时varchar
,一些数据会丢失/更改。
但是,将varchar
数据类型转换为nvarchar
?
我知道从 转换为nvarchar
时varchar
,一些数据会丢失/更改。
但是,将varchar
数据类型转换为nvarchar
?
nvarchar 存储的 unicode 字符是 varchar 字符大小的两倍。因此,只要您的 nvarchar 至少是您的 vchar 长度的两倍,这将不是问题。
如果您没有使用任何超出 ASCII 字符范围的字符(即您没有 Unicode 字符),则仍然可以转换其他方式
简而言之,确保您的 nvarchar 长度是最大 varchar 值的两倍,然后进行更改。
因为我似乎收到了一些反对意见(没有解释),所以我想明确一点,当我提到上面的长度时,我指的是大小,例如所需的存储数据量。请注意我在下面的评论,我也将在这里包括:
如果您正在谈论使用 SQL 更改长度,那么我认为您应该可以拥有相同的长度。这是因为当您根据字符数而不是实际存储的数据量来指定长度时
在大多数情况下,这两种数据类型在您在 SQL Server 中或从应用程序中使用它们的方式上是相同的。不同之处在于 nvarchar 用于存储 unicode 数据,用于在您的数据库表中存储多语言数据。其他语言有一组扩展的字符代码需要保存,并且此数据类型允许此扩展。如果您的数据库不会存储多语言数据,则应改用 varchar 数据类型。原因是 nvarchar 占用的空间是 varchar 的两倍,这是因为需要存储其他语言的扩展字符代码。
(来自:http ://weblogs.asp.net/guys/archive/2005/01/15/353550.aspx )
因此,nvarchar 是 varchar 的超集,因此在转换时不应丢失数据。
从这篇文章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 个字符(不是字节)。