Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Klucz podstawowy bez rozróżniania wielkości liter typu nvarchar, gdzie ß !=ss

Ach, ale jest możliwe, ponieważ jest zestawienie, które radzi sobie z tym naturalnie (w rzeczywistości kilka, ale wszystkie w tej samej „rodzinie”):Hungarian_Technical_* (no cóż, bez wariantów CaseSensitive (CS) i Binary (BIN / BIN2)). Oczywiście nadal nie jestem pewien, czy jest to dobry wybór dla PK, ale bez powodu nie może to być 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]);

Wyniki:

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

Istnieją łącznie 24 zestawienia, które będą działać w ten sposób. Możesz je znaleźć poprzez:

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

Są to:

Jeśli wersja 100 dostępne są sortowania (co oznacza:używasz SQL Server 2008 lub nowszego), a następnie używaj tych, a nie sortowań bez numeru wersji w ich nazwach.

EDYTUJ:
Znalazłem dodatkowe informacje na temat zestawienia „Węgierska technika”, które mogą być interesujące:

  • MySQL:zestawienie węgierskie -- Jest to archiwum dyskusji listserv prowadzonej przez niektórych programistów MySQL próbujących dowiedzieć się, jak zaimplementować sortowanie. Najwyraźniej ma pewne złożone zasady, przynajmniej częściowo ze względu na konieczność zrównania wielu znaków w jeden znak do sortowania (patrz rozdział "3. Specjalna zasada digrafu/trygrafu"). To może spowodować nieoczekiwane zachowanie. Konkretne kombinacje liter są odnotowane w tej sekcji, więc przynajmniej ułatwia to skonfigurowanie przypadku testowego, aby pomóc określić, czy reguły sortowania są nieważne przy użyciu tego sortowania.

  • Dlaczego jest tak wiele(106) zestawień węgierskich? -- To jest dyskusja na social.msdn, która zawiera kilka interesujących informacji. Jest tam komentarz Erlanda Sommarsko, w którym stwierdza:

    Biorąc pod uwagę dyskusję twórców MySQL na temat złożonych reguł, te wyniki testów nie wydają się aż tak zaskakujące.

Tak więc oba te elementy prawdopodobnie powinny być brane pod uwagę przy podejmowaniu decyzji, czy wybrać łatwą drogę, po prostu ustawiając pole NVARCHAR na jedną z tych węgierskich zestawień technicznych, czy idąc z zaleceniem @GarethD dla kolumny obliczeniowej.

Więcej informacji na temat pracy z ciągami i sortowaniami znajdziesz na:Informacje o sortowaniach



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wszystkie tabele z lub bez ograniczenia klucza podstawowego w bazie danych serwera SQL — samouczek SQL Server / TSQL 59

  2. Przekazywanie wielu wierszy danych do procedury składowanej

  3. T-SQL Grupowanie wierszy z kolumn o maksymalnej długości w różnych wierszach (?)

  4. Odczytaj wzorzec char,double,int z ciągu w sql

  5. Hierarchia drzewa programu SQL Server i zagnieżdżone zestawy z identyfikatorami zduplikowanych rekordów