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<br /> • 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
开头、NCHAR
、NVARCHAR
和NTEXT
签名(已弃用),以及带有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#:日期处理