sql >> Databáze >  >> RDS >> Sqlserver

Primární klíč typu nvarchar bez ohledu na velikost písmen, kde ß !=ss

Aha, ale je možné, jak je porovnávání, které to zvládá přirozeně (ve skutečnosti několik, ale všechny ve stejné „rodině“):Hungarian_Technical_* (dobře, bez variací CaseSensitive (CS) a Binary (BIN / BIN2). Samozřejmě si stále nejsem jistý, zda je to dobrá volba pro PK, ale žádný důvod, proč to nemůže být 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]);

Výsledky:

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

Existuje celkem 24 porovnávání, které budou fungovat tímto způsobem. Najdete je na:

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

Jsou to:

Pokud je verze 100 kolace jsou k dispozici (to znamená:používáte SQL Server 2008 nebo novější), pak použijte tyto a ne kolace bez čísla verze v názvu.

UPRAVIT:
Našel jsem nějaké další informace o porovnávání "Maďarské technické", které by mohly být zajímavé:

  • MySQL:maďarské řazení -- Toto je archiv diskuse na listservu od některých vývojářů MySQL, kteří se snaží zjistit specifika, jak implementovat řazení. Zjevně má některá složitá pravidla, alespoň částečně kvůli potřebě srovnat více znaků do jediného znaku pro třídění (hledejte sekci "3. Speciální pravidlo digrafu/trigrafu"). Toto může způsobit nějaké neočekávané chování. Konkrétní kombinace písmen jsou v této části uvedeny, takže to alespoň usnadňuje nastavení testovacího případu, který pomůže určit, zda pravidla třídění ruší platnost pomocí tohoto řazení.

  • Proč existuje tolik(106) maďarských porovnávání? -- Toto je diskuse na social.msdn, která obsahuje zajímavé informace. Je tam komentář od Erlanda Sommarska, ve kterém uvádí:

    Vzhledem k diskuzi vývojářů MySQL o složitých pravidlech se tyto výsledky testů nezdají až tak překvapivé.

Obě tyto položky by tedy pravděpodobně měly být zohledněny při rozhodování, zda jít jednoduchou cestou jednoduše nastavit pole NVARCHAR na jedno z těchto maďarských technických porovnávání, nebo postupovat podle doporučení @GarethD ohledně vypočítaného sloupce.

Další informace o práci s řetězci a porovnáváním naleznete na adrese:Informace o porovnávání



  1. když používám databázový systém MySQL s Jena2, mám java.lang.NoSuchMethodError

  2. Nastavte časový limit připojení k databázi v Pythonu

  3. Kdy se plánují (SELECT) dotazy?

  4. Připojení Mysql na localhost odmítnuto