【发布时间】:2021-03-23 15:08:31
【问题描述】:
我在比较两个字符串时遇到了一个问题,一个是德国特殊字符“ß”,另一个是普通字符“ss”。我的数据库是“SQL_Latin1_General_CP1_CI_AS”排序规则,它应该比较这些字符,并且只有当我将它们作为硬编码字符串进行比较时,它才会按预期进行。但是,当我使用 cast 将它们转换为 NVARCHAR 时,它会将它们平等对待。我不明白为什么更改类型会产生影响。下面是我的例子。
SELECT name, collation_name
FROM sys.databases
WHERE name = N'DBName';
/**/
IF CAST('Steds.Weßels' AS NVARCHAR(100)) = CAST('Steds.Wessels' AS NVARCHAR(100))
BEGIN
SELECT 'Equal'
END
ELSE
BEGIN
SELECT 'Not equal'
END
/**/
IF 'Steds.Weßels' = 'Steds.Wessels'
BEGIN
SELECT 'Equal'
END
ELSE
BEGIN
SELECT 'Not equal'
END
【问题讨论】:
-
这个
CAST('Steds.Weßels' ...已经错了。您需要通过prefacing the string with N 编写unicode 常量 -
这实际上会使
CASTing 指向那里,@SMor。对于 OP 的示例,ß可以由varchar表示。
标签: sql sql-server