【问题标题】:Save UTF8 string to SQL Server将 UTF8 字符串保存到 SQL Server
【发布时间】:2012-03-13 19:06:33
【问题描述】:

我有一个 UTF8 字符串,例如:

Thermal Oxide: 0 Å to 40 μm

我想将它保存在 SQL Server 中。

当我将它保存为数据类型 ntext/nvarchar - 它保存如下:

Thermal Oxide: 0 ? to 40 ?m

我能做什么?

【问题讨论】:

  • 这完全取决于你如何(取消)保存它。
  • 如何保存它?? Nvarchar绝对能够存储这个字符串 - 完全没有问题。

标签: c# sql-server utf-8


【解决方案1】:

在引用的字符串前面加上N:

INSERT INTO someTable (myField) VALUES (N'Thermal Oxide: 0 Å to 40 μm')

【讨论】:

  • 为什么突然投反对票?如果我能改进答案,我很想知道如何。
【解决方案2】:

我有一个 UTF8 字符串,例如:

实际上,不,你没有 - 你有一个 unicode 字符串。然而,UTF8 仅适用于它的编码方式,即存储方式。如果您的意思是要存储它,那很好;简单地说:确保你存储它的列是nvarchar(somelen)(或类似的),并且你使用参数来存储它。如果你只使用cmd.Parameters.AddWithValue("paramName", yourString); 那就没问题(对于像insert [tablename] (...fields...) values (..., @foo) 这样的TSQL 等)。同样,任何 ORM / micro-ORM / 其他数据库工具都可以正常工作,只要列是 nvarchar(somelen) 或类似的。例如,使用“dapper”:

string s = "Thermal Oxide: 0 Å to 40 μm";
connection.Execute("insert [tablename] (colname) values (@s)", new {s});

【讨论】:

  • 嗨,马克!为什么new {s} 而不是简单的s?此外,字符串s 前面有一个单引号,但没有关闭单引号。
  • @dotancohen 单引号不应该在那里,抱歉。 Re "simply s" - dapper 使用它作为参数名称; new {s} 表示具有字符串成员 s 的匿名类型,其值为 "Thermal ..." - 我们将其作为参数化命令运行所需的一切
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 2011-03-05
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多