在将 nvarchar
转换为 varchar
时,会丢失/更改一些数据。
但是,将 varchar
数据类型转换为 nvarchar
时是否存在数据更改的风险?
在将 nvarchar
转换为 varchar
时,会丢失/更改一些数据。
但是,将 varchar
数据类型转换为 nvarchar
时是否存在数据更改的风险?
nvarchar 存储 Unicode 字符,其大小是 varchar 字符的两倍。只要您的 nvarchar 至少是您的 vchar 的两倍长度,这不会成为问题。
如果没有使用 ASCII 字符范围之外的字符(即您没有 Unicode 字符),仍然可以实现双向转换。
简而言之,请确保您的 nvarchar 长度是您最大 varchar 值的两倍,然后进行更改。
由于我似乎收到了几个负评(没有解释),所以我想明确一下,当我上面提到长度时,我指的是大小,例如所需存储数据量。请注意我的下面的评论,我也将在此处包含:
如果您正在使用 SQL 更改长度,那么我认为您应该可以具有相同的长度。这是因为当您指定长度时,是基于字符数而不是实际存储的数据量。
nvarchar
用于存储 Unicode 数据,用于在数据库表中存储多语言数据。其他语言有一组扩展字符代码需要保存,而此数据类型允许进行此扩展。如果您的数据库不会存储多语言数据,则可以使用 varchar
数据类型。原因是 nvarchar
占用的空间是 varchar
的两倍,这是因为需要存储其他语言的扩展字符代码。
编辑:上述引用摘自 http://weblogs.asp.net/,该源页面已不存在。nvarchar:可变长度的Unicode字符数据。与数据库排序规则有关,用于比较。
nvarchar
可以说是 varchar
的“超集”,在转换时不应该丢失数据。问题更多地涉及ASCII和Unicode之间的区别。
从这篇文章http://searchsqlserver.techtarget.com/tip/Differences-between-varchar-and-nvarchar-in-SQL-Server
VARCHAR 存储为常规的 8 位数据。但是 NVARCHAR 字符串以 UTF-16 的形式存储在数据库中,每个字符占用 16 位或两个字节,始终如一,并在输出时转换为数据库连接正在使用的任何代码页(通常是 UTF-8)。也就是说,NVARCHAR 字符串与其 VARCHAR 表亲具有相同的长度限制 - 8000 个字节。然而,由于 NVARCHAR 使用两个字节来表示每个字符,这意味着给定的 NVARCHAR 最多只能容纳 4000 个字符(而不是字节)。
nvarchar(max)
当然可以容纳比 4,000 个字符更多的内容。 - Martin Smith
varchar(50)
,那么需要改成nvarchar(100)
吗? - Curtis