C# 字符串和 VARCHAR 和 NVARCHAR

Sli*_*nky 5 c# sql-server

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

例子:

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

public string TransactionId {get; set;}
Run Code Online (Sandbox Code Playgroud)

如果出现以下情况,TransactionId 中的值是否会有所不同:

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

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

Ski*_*gle 7

它们将以几乎完全相同的字符串类型存储。唯一的区别是 SQL 数据库中的 UTF-16 或更大的格式将占用数据库中更多的物理存储空间。例如,如果您仅使用 ASCII/UTF-8(任何 8 位有限字符集),则应存储为 varchar。C# 中的字符串值将与 nvarchar 完全相同,而 varchar 都可以本地转换为字符串。您的字符串的唯一内容差异是使用扩展字符并将其存储在 nvarchar 中。这些不会存储在 varchar 中。

也只是提供信息;SQL 类型中的 var 意味着大小将根据给定的内容动态更改 varchar(n) 其中 n 是它可以达到的最大大小。例如,varbinary(n) 等的工作方式相同。