C#字符串及VARCHAR和NVARCHAR

6

我很好奇C#如何解释/存储来自SQL Server的不同数据类型,然后将其存储在C#字符串变量中:

例如:

假设我有一个变量来保存从数据库调用中检索到的字符串值:

public string TransactionId {get; set;}

如果:

  1. SQL Server中的数据类型是VARCHAR(8位)
  2. SQL Server中的数据类型是NVARCHAR(16位)

TransactionId中的值是否会有所不同?

我只是想知道这两种不同的数据类型如何存储在C#字符串类型中。C#会用8位存储VARCHAR值,用16位存储NVARCHAR值吗?


1
C#在字符串中使用Unicode值,无论它是来自字节数组还是nvarchar。此外,您严重低估了Unicode的复杂性 - nvarchar和C#的string都可以使用超过2个字节的字符。 - Luaan
1
C# 字符串是 UTF-16。 - Davin Tryon
2个回答

7
它们将以字符串类型存储。唯一的区别是 UTF-16 或更大编码在 SQL 数据库中格式化将占用更多物理存储空间。例如,如果仅使用 ASCII/UTF-8(任何 8 位字符集),您应该存储为 varchar。在 C# 中,字符串值将与 nvarchar 和 varchar 完全相同,并且可以本地转换为字符串。您的字符串的唯一内容差异是是否使用扩展字符并存储在 nvarchar 中。这些字符将不会存储在 varchar 中。
另外,只是提供信息;SQL 类型中的 var 意味着其大小将根据所给予的内容动态更改,例如 varchar(n),其中 n 是其最大大小。例如,varbinary(n) 等也是如此。

1
UTF-8不同于ASCII。Varchar只能容纳7位ASCII字符而不会丢失信息。如果您使用任何国际字符,那就没戏了。 - cskwg

1

2
请您能否从链接中提取相关信息并将其放入您的回答中? - dav_i
1
http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers - Soner Gönül

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接