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

Chiave primaria senza distinzione tra maiuscole e minuscole di tipo nvarchar dove ß !=ss

Ah, ma lo è possibile perché è una raccolta che lo gestisce in modo naturale (diversi in realtà, ma tutti nella stessa "famiglia"):Ungherese_Tecnico_* (beh, meno le variazioni CaseSensitive (CS) e Binary (BIN / BIN2)). Ovviamente, non sono ancora sicuro che questa sia una buona scelta per un PK, ma non c'è motivo per cui non possa essere un 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]);

Risultati:

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

Ci sono 24 regole di confronto totali che funzioneranno in questo modo. Puoi trovarli tramite:

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

Sono:

Se la versione 100 sono disponibili le regole di confronto (ovvero:stai usando SQL Server 2008 o versioni successive), quindi usa quelle e non le regole di confronto senza numero di versione nei loro nomi.

MODIFICA:
Ho trovato alcune informazioni aggiuntive sulla raccolta "Tecniche ungheresi" che potrebbero essere di interesse:

  • MySQL:confronto ungherese -- Questo è un archivio di una discussione su listserv di alcuni sviluppatori MySQL che cercano di capire le specifiche di come implementare le regole di confronto. Apparentemente ha alcune regole complesse, dovute almeno in parte alla necessità di associare più caratteri in un singolo carattere per l'ordinamento (cercare la sezione "3. Regola speciale di digramma/trigrafo"). Questo potrebbe causare un comportamento imprevisto. Le combinazioni di lettere specifiche sono annotate in quella sezione, quindi almeno semplifica l'impostazione di un test case per aiutare a determinare se le regole di ordinamento non sono valide utilizzando queste regole di confronto.

  • Perché ci sono così tante(106) regole di confronto ungheresi? -- Questa è una discussione su social.msdn che contiene alcune informazioni interessanti. C'è un commento di Erland Sommarsko in cui afferma:

    Data la discussione degli sviluppatori MySQL sulle regole complesse, i risultati dei test non sembrano così sorprendenti.

Quindi, entrambi questi elementi probabilmente dovrebbero essere presi in considerazione nel decidere se seguire la strada più semplice impostando semplicemente il campo NVARCHAR su una di queste regole di confronto tecniche ungheresi o seguendo la raccomandazione di @GarethD della colonna calcolata.

Per ulteriori informazioni sull'utilizzo di stringhe e regole di confronto, visitare:Informazioni sulle regole di confronto