sql >> Database teknologi >  >> RDS >> Sqlserver

Store og små bogstaver primærnøgle af typen nvarchar hvor ß !=ss

Ah, men det er muligt, som der er en kollation, der håndterer dette naturligt (flere faktisk, men alle i samme "familie"):Ungarsk_teknisk_* (nå, minus CaseSensitive (CS) og Binære (BIN / BIN2) variationer). Jeg er selvfølgelig stadig ikke sikker på, at dette er et godt valg til en PK, men ingen grund til, at det ikke kan være et 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]);

Resultater:

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

Der er i alt 24 sammenstillinger, der vil fungere på denne måde. Du kan finde 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 er:

Hvis versionen 100 sorteringer er tilgængelige (hvilket betyder:du bruger SQL Server 2008 eller nyere), så brug dem og ikke sorteringer uden versionsnummer i deres navne.

EDIT:
Jeg fandt nogle yderligere oplysninger om "Ungarsk teknisk"-samling, som kunne være af interesse:

  • MySQL:Ungarsk kollation -- Dette er et arkiv af en listserv-diskussion af nogle MySQL-udviklere, der forsøger at finde ud af detaljerne i, hvordan man implementerer sammenstillingen. Det har tilsyneladende nogle komplekse regler, som i det mindste delvist skyldes behovet for at sidestille flere tegn til et enkelt tegn til sortering (se efter afsnittet "3. Speciel digraf/trigrafregel"). Dette måske forårsage noget uventet adfærd. De specifikke bogstavkombinationer er noteret i det afsnit, så det gør det i det mindste nemmere at oprette en testcase for at hjælpe med at afgøre, om sorteringsreglerne er ugyldige ved brug af denne sortering.

  • Hvorfor er der så mange(106) ungarske kollationer? -- Dette er en diskussion på social.msdn, der har nogle interessante oplysninger. Der er en kommentar derinde af Erland Sommarsko, hvori han udtaler:

    I betragtning af diskussionen fra MySQL-udviklerne om de komplekse regler, virker disse testresultater ikke så overraskende.

Så begge disse punkter bør sandsynligvis tages med i beslutningen om, hvorvidt man skal gå den nemme vej, blot at indstille NVARCHAR-feltet til en af ​​disse ungarske tekniske sammenstillinger, eller følge @GarethDs anbefaling af den beregnede kolonne.

For mere information om at arbejde med strenge og kollationer, besøg venligst:Samlinger Info



  1. Læsning fra stream mislykkedes - mysql_native_password fejl

  2. Brug afgrænsningsramme fra PostGIS i vanilla Postgres-forespørgsel

  3. Hvordan man kender relationer mellem tabeller

  4. Forespørgsel efter indlæg og tags i samme forespørgsel