sql >> Database >  >> RDS >> Sqlserver

Hoofdletterongevoelige primaire sleutel van het type nvarchar waarbij ß !=ss

Ah, maar het is mogelijk aangezien er is een verzameling die dit van nature afhandelt (meerdere eigenlijk, maar allemaal in dezelfde "familie"):Hungarian_Technical_* (nou ja, minus de CaseSensitive (CS) en Binary (BIN / BIN2) variaties). Natuurlijk weet ik nog steeds niet zeker of dit een goede keuze is voor een PK, maar geen reden waarom het geen UNIQUE INDEX kan zijn .

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]);

Resultaten:

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

Er zijn in totaal 24 sorteringen die op deze manier werken. Je vindt ze via:

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

Dit zijn:

Als de versie 100 sorteringen beschikbaar zijn (wat betekent:u gebruikt SQL Server 2008 of nieuwer), gebruik dan die en niet de sorteringen zonder versienummer in hun naam.

BEWERKEN:
Ik heb wat aanvullende informatie gevonden over de "Hongaarse technische" verzameling die van belang kan zijn:

  • MySQL:Hongaarse sortering -- Dit is een archief van een listserv-discussie door een aantal MySQL-ontwikkelaars die proberen te achterhalen hoe de sortering moet worden geïmplementeerd. Blijkbaar heeft het een aantal complexe regels, in ieder geval gedeeltelijk vanwege de noodzaak om meerdere karakters gelijk te stellen aan een enkel karakter om te sorteren (kijk naar sectie "3. Speciale digraph/trigraph rule"). Dit misschien onverwacht gedrag veroorzaken. De specifieke lettercombinaties worden in dat gedeelte vermeld, dus het maakt het in ieder geval gemakkelijker om een ​​testcase op te zetten om te helpen bepalen of de sorteerregels ongeldig zijn bij het gebruik van deze sortering.

  • Waarom zijn er zoveel (106) Hongaarse collaties? -- Dit is een discussie op social.msdn met interessante informatie. Er staat daar een opmerking van Erland Sommarsko waarin hij zegt:

    Gezien de discussie van de MySQL-ontwikkelaars over de complexe regels, lijken die testresultaten niet zo verrassend.

Dus met beide items moet waarschijnlijk rekening worden gehouden bij de beslissing om al dan niet de gemakkelijke weg te volgen door het veld NVARCHAR eenvoudig in te stellen op een van deze Hongaarse technische sorteringen, of om te gaan met de aanbeveling van @GarethD voor de berekende kolom.

Ga voor meer informatie over het werken met strings en collaties naar:Collations Info



  1. Kan MySQL-server niet starten - Besturingsproces afgesloten met foutcode

  2. Hoe racecondities bij online hotelboekingen te voorkomen?

  3. Dubbele bestanden verwijderen met alleen een MySQL-query?

  4. SQL-query werkt in PL/SQL maar niet in Visual Studio