Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Нечувствителен към регистър първичен ключ от тип nvarchar, където ß !=ss

А, но е възможно, тъй като е съпоставка, която се справя с това естествено (всъщност няколко, но всички в едно и също „семейство“):Hungarian_Technical_* (е, без вариациите CaseSensitive (CS) и Binary (BIN / BIN2). Разбира се, все още не съм сигурен, че това е добър избор за PK, но няма причина да не може да бъде 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]);

Резултати:

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

Има общо 24 сравнявания, които ще работят по този начин. Можете да ги намерите чрез:

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

Те са:

Ако версията 100 съпоставянията са налични (което означава:използвате SQL Server 2008 или по-нов), тогава използвайте тези, а не съпоставянията без номер на версията в техните имена.

РЕДАКТИРАНЕ:
Намерих някаква допълнителна информация за сравняването „Унгарски технически“, която може да представлява интерес:

  • MySQL:унгарско съпоставяне -- Това е архив на дискусия на listserv от някои разработчици на MySQL, които се опитват да разберат спецификата на това как да внедрят сортирането. Очевидно той има някои сложни правила, дължащи се поне отчасти на необходимостта от приравняване на множество знаци в един знак за сортиране (потърсете раздел "3. Специално правило за диграф/триграф"). Това може предизвика някакво неочаквано поведение. Конкретните комбинации от букви са отбелязани в този раздел, така че най-малкото улеснява настройването на тестов случай, за да се определи дали правилата за сортиране правят невалидно използването на това съпоставяне.

  • Защо има толкова много (106) унгарски съпоставки? -- Това е дискусия в social.msdn, която съдържа интересна информация. Там има коментар от Erland Sommarsko, в който той заявява:

    Предвид дискусията от разработчиците на MySQL относно сложните правила, резултатите от тези тестове не изглеждат чак толкова изненадващи.

И така, и двата елемента вероятно трябва да бъдат взети под внимание при вземането на решение дали да се премине по лесния път, или не, просто да се зададе полето NVARCHAR на едно от тези унгарски технически съпоставки или да се следва препоръката на @GarethD за изчислената колона.

За повече информация относно работата с низове и съпоставки, моля, посетете:Информация за съпоставки



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запис на родителска таблица Child - Изграждане на SQL заявка

  2. Как да убия/спра незабавно дълга SQL заявка?

  3. Въпрос за проектиране на база данни - Категории / Подкатегории

  4. идентификатор на служител автоматично генериране с префикс

  5. Как да автоматизирате процеса на синхронизиране на схемата на база данни на SQL Server