Che*_*ven 1 c# sql-server unicode
我在SQL Server中定义了列,nvarchar
结果(我认为)'Weiss'=='Weiß'.但在我的c#代码'Weiss'中!='Weiß'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tags]
(
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Value] [nvarchar](125) NOT NULL,
[IsBlocked] [bit] NOT NULL,
[Created] [datetimeoffset](7) NOT NULL,
[Updated] [datetimeoffset](7) NOT NULL,
CONSTRAINT [PK_dbo.Tags]
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
在SQL Server中:
SELECT *
FROM [Tags]
WHERE Value = 'Weiss Kreuz'
Run Code Online (Sandbox Code Playgroud)
返回值为'WeißKreuz'的行
有人可以解释一下这种情况如何以及如何在c#和SQL Server中进行相同的比较?
你可能知道德语中的德语字母eszett(ß)在德语中被用来代替double-s.因此,如果您对Weiss和Weiß(意为白色)这两个词进行UNICODE比较,则它们被认为是相同的.
在C#中,您可以使用以下方法进行UNICODE比较(也称为文化敏感比较)String.Compare
:
String.Compare("Weiss", "Weiß")
Run Code Online (Sandbox Code Playgroud)
这将返回0,表示两个字符串相等.
使用equals运算符:
"Weiss" == "Weiß"
Run Code Online (Sandbox Code Playgroud)
返回false但此运算符使用区域不敏感的比较.
SQL Server使用排序规则处理字符串的排序和比较.早期版本的SQL Server使用的规则与Windows使用的规则(以及.NET/C#)不同,但现在SQL Server排序规则已与Windows中的UNICODE规则保持一致.
这提供了SQL Server中数据类型之间的一致性,并且还允许开发人员使用SQL Server使用的相同规则对其应用程序中的字符串进行排序.
归档时间: |
|
查看次数: |
336 次 |
最近记录: |