gpt4 book ai didi

sql-server - nvarchar 类型的不区分大小写的主键,其中 ß != ss

转载 作者:行者123 更新时间:2023-12-03 08:16:47 28 4
gpt4 key购买 nike

这个问题“Need a case insensitive collation where ss != ß”解决了varchar类型列,但我的必须是 nvarchar .

据我所知,SQL_Latin1_General_Cp437_BIN区分 ßss .但它也区分大小写。我的是一个主键列,它也需要区分大小写:

我需要例如weiß/Weiß被认为是平等的,而且 weiss/Weiss ,但不是 weiß/weiss也不是 Weiß/Weiss也不是 weiß/Weiss等等。

我已经为此搜索了很多,真的让我在这里倒霉吗?必须有很多人处于相同的情况,我简直不敢相信这无法解决。

最佳答案

啊,但这是可能的,因为有一个排序规则可以自然地处理这个问题(实际上有几个,但都在同一个“家庭”中):匈牙利语_技术_* (好吧,减去 CaseSensitive (CS) 和 Binary (BIN/BIN2) 变体)。当然,我仍然不确定这是否是PK的好选择,但没有理由它不能是UNIQUE INDEX .

SELECT tmp.*,
IIF(tmp.[First] = tmp.[Second] COLLATE Hungarian_Technical_CI_AI,
N'Equal',
N'NOT EQUAL') AS [Result]
FROM (
SELECT N'weiß', N'Weiß', N'Equal'
UNION ALL
SELECT N'weiss', N'Weiss', N'Equal'
UNION ALL
SELECT N'weiß', N'weiss', N'NOT Equal'
UNION ALL
SELECT N'Weiß', N'Weiss', N'NOT Equal'
UNION ALL
SELECT N'weiß', N'Weiss', N'NOT Equal'
) tmp ([First], [Second], [Ideal]);

结果:

First   Second  Ideal       Result
weiß Weiß Equal Equal
weiss Weiss Equal Equal
weiß weiss NOT Equal NOT EQUAL
Weiß Weiss NOT Equal NOT EQUAL
weiß Weiss NOT Equal NOT EQUAL

总共有 24 个排序规则可以以这种方式工作。您可以通过以下方式找到它们:

SELECT hc.*
FROM sys.fn_HelpCollations() hc
WHERE hc.name LIKE N'Hungarian[_]Technical%'
AND hc.name LIKE N'%[_]CI%'
ORDER BY hc.name;

他们是:

Hungarian_Technical_100_CI_AI Hungarian_Technical_100_CI_AI_KS
Hungarian_Technical_100_CI_AI_KS_SC
Hungarian_Technical_100_CI_AI_KS_WS
Hungarian_Technical_100_CI_AI_KS_WS_SC
Hungarian_Technical_100_CI_AI_SC Hungarian_Technical_100_CI_AI_WS
Hungarian_Technical_100_CI_AI_WS_SC Hungarian_Technical_100_CI_AS
Hungarian_Technical_100_CI_AS_KS Hungarian_Technical_100_CI_AS_KS_SC
Hungarian_Technical_100_CI_AS_KS_WS
Hungarian_Technical_100_CI_AS_KS_WS_SC
Hungarian_Technical_100_CI_AS_SC Hungarian_Technical_100_CI_AS_WS
Hungarian_Technical_100_CI_AS_WS_SC Hungarian_Technical_CI_AI
Hungarian_Technical_CI_AI_KS Hungarian_Technical_CI_AI_KS_WS
Hungarian_Technical_CI_AI_WS Hungarian_Technical_CI_AS
Hungarian_Technical_CI_AS_KS Hungarian_Technical_CI_AS_KS_WS
Hungarian_Technical_CI_AS_WS



如果版本 100排序规则可用(意思是:您使用的是 SQL Server 2008 或更新版本),然后使用这些排序规则而不是名称中没有版本号的排序规则。

编辑:
我在“匈牙利技术”整理中找到了一些可能感兴趣的附加信息:
  • MySQL: Hungarian collation -- 这是一些 MySQL 开发人员试图找出如何实现排序规则的细节的 listserv 讨论存档。显然它有一些复杂的规则,至少部分原因是需要将多个字符等同于一个字符进行排序(查找“3. 特殊二合字母/三合字母规则”部分)。这可能会导致一些意外行为。在该部分中注明了特定的字母组合,因此至少可以更轻松地设置测试用例,以帮助确定使用此排序规则的排序规则是否无效。
  • Why are there so many(106) Hungarian collations? -- 这是关于 social.msdn 的讨论,有一些有趣的信息。 Erland Sommarsko 在那里发表了评论,他指出:

    I ran a crazy performance test to test all collations in SQL 2008. I had an idle server available, and the test ran for 8-9 days. And Hungarian_Technical came out as the slowest as I recall.



    鉴于 MySQL 开发人员对复杂规则的讨论,这些测试结果似乎并不那么令人惊讶。

  • 因此,在决定是否采用简单的方法将 NVARCHAR 字段简单地设置为这些匈牙利技术排序规则之一,或者采用 @GarethD 对计算列的建议时,这两个项目可能都应该考虑在内。

    有关使用字符串和排序规则的更多信息,请访问: Collations Info

    关于sql-server - nvarchar 类型的不区分大小写的主键,其中 ß != ss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106836/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com