C# / Microsoft SQL Server 2012:Unicode 符号显示不正确 (•)

Posted

技术标签:

【中文标题】C# / Microsoft SQL Server 2012:Unicode 符号显示不正确 (•)【英文标题】:C# / Microsoft SQL Server 2012: Unicode symbols not displaying correctly (•) 【发布时间】:2017-10-13 22:22:13 【问题描述】:

我的 SQL Server 上有一个产品数据库表。我尝试通过我的 C# 应用程序更改其 html 文本。到目前为止一切顺利。

HTML 包含 • - 用于枚举的符号。尽管此 • 显示在 SQL Server Management Studio 中,但它不会显示在 Web 浏览器中,即使我在应用程序中重新打开该产品也不显示。

如果我使用 Management Studio 通过在表视图(非 SQL)中键入产品来更新产品,则 • 会在所有应用程序中正确显示。 该表的排序规则是:SQL_Latin1_General_CP850_CI_AS

我这样更新产品:

UPDATE Products SET ShopText = '• 1<br /> • 2' WHERE ItemCode = '12345'

我做错了什么?

【问题讨论】:

列的数据类型是什么?是varchar吗?还是 nvarchar?如果你想存储 unicode,你真的想使用 nvarchar... 还有:你试过 ShopText = N'• 1&lt;br /&gt; • 2' 吗? 【参考方案1】:

尝试在您的文字前面放置一个N...

SELECT  '• 1<br /> • 2' COLLATE SQL_Latin1_General_CP850_CI_AS
      ,N'• 1<br /> • 2' COLLATE SQL_Latin1_General_CP850_CI_AS

重要! 确保您的Products.ShopText 列也是NVARCHAR(或NCHAR)列...

SQL Server 知道两种字符串:

Unicode UCS-2(2 字节,Unicode UTF-16 的子集),以N 开头、NCHARNVARCHARNTEXT 签名(已弃用),以及带有N 的文字,例如N'SomeText'扩展 ASCII(1 字节)。

试试这个,没有N 也可以工作(但不要在整个数据库中混合排序规则!):

SELECT '• 1<br /> • 2' COLLATE Latin1_General_CI_AS

Extended Ascii 使用第一个 0-127 来编码 纯拉丁文集。表格的上半部分取决于实际的排序规则/代码页。对于 1 字节编码的字符串,您无法确定字符串是否保持不变:

【讨论】:

这行得通!非常感谢您的快速回复和解释!

以上是关于C# / Microsoft SQL Server 2012:Unicode 符号显示不正确 (•)的主要内容,如果未能解决你的问题,请参考以下文章

C# / Microsoft SQL Server 2012:Unicode 符号显示不正确 (•)

C# 代码连接到局域网上的 Microsoft SQL Server Compact 3.5? [关闭]

Microsoft SQL Server 数据库/Visual Studio C#:日期处理

Microsoft 访问 SQL Server Express [关闭]

C# 学习笔记(17)操作SQL Server 上

在 C# 中查找所有 SQL Server 数据库用户