sql >> Databasteknik >  >> RDS >> Sqlserver

Skiftlägesokänslig primärnyckel av typen nvarchar där ß !=ss

Ah, men det är möjligt som det finns en sammanställning som hanterar detta naturligt (flera faktiskt, men alla i samma "familj"):Ungerska_tekniska_* (nåja, minus varianterna CaseSensitive (CS) och Binära (BIN / BIN2)). Naturligtvis är jag fortfarande inte säker på att detta är ett bra val för en PK, men ingen anledning att det inte kan vara ett 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]);

Resultat:

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

Det finns totalt 24 sammanställningar som kommer att fungera på detta sätt. Du hittar dem 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;

De är:

Om versionen 100 sorteringar är tillgängliga (vilket betyder:du använder SQL Server 2008 eller senare), använd sedan dessa och inte sorteringarna utan versionsnummer i namnen.

EDIT:
Jag hittade ytterligare information om kollationen "Ungerska tekniska" som kan vara av intresse:

  • MySQL:Ungersk kollation -- Det här är ett arkiv av en listserv-diskussion av vissa MySQL-utvecklare som försöker ta reda på detaljerna för hur man implementerar sammanställningen. Tydligen har den några komplicerade regler, åtminstone delvis på grund av att flera tecken måste likställas till ett enda tecken för sortering (leta efter avsnittet "3. Särskild digraf/trigrafregel"). Detta kan orsaka något oväntat beteende. De specifika bokstavskombinationerna är noterade i det avsnittet så det gör det åtminstone lättare att ställa in ett testfall för att hjälpa till att avgöra om sorteringsreglerna ogiltigförklarar med denna sortering.

  • Varför finns det så många(106) ungerska sammanställningar? -- Det här är en diskussion på social.msdn som har en del intressant information. Där finns en kommentar av Erland Sommarsko där han konstaterar:

    Med tanke på diskussionen från MySQL-utvecklarna om de komplexa reglerna, verkar dessa testresultat inte så överraskande.

Så båda dessa punkter bör förmodligen tas med i beslutet om man ska gå den enkla vägen eller inte att helt enkelt ställa in NVARCHAR-fältet till en av dessa ungerska tekniska sammanställningar, eller följa @GarethDs rekommendation av den beräknade kolumnen.

För mer information om att arbeta med strängar och sorteringar, vänligen besök:Kollationsinfo



  1. SchemaSpy PostgreSQL - VARNA - Anslutningsfel

  2. Bästa sättet att lagra en array i MySQL-databas?

  3. Problem med att ansluta till fjärransluten MySQL-värd med Rails

  4. Hur man kontrollerar om en tabell finns i SQLite