sql >> Base de Datos >  >> RDS >> Sqlserver

Clave principal insensible a mayúsculas y minúsculas de tipo nvarchar donde ß !=ss

Ah, pero es posible como hay es una colación que maneja esto naturalmente (varios en realidad, pero todos en la misma "familia"):Hungarian_Technical_* (bueno, menos las variaciones CaseSensitive (CS) y Binary (BIN / BIN2)). Por supuesto, todavía no estoy seguro de que esta sea una buena opción para un PK, pero no hay motivo para que no pueda ser 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]);

Resultados:

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

Hay 24 intercalaciones en total que funcionarán de esta manera. Puede encontrarlos a través de:

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

Ellos son:

Si la versión 100 las intercalaciones están disponibles (lo que significa que está utilizando SQL Server 2008 o posterior), luego utilícelas y no las intercalaciones sin número de versión en sus nombres.

EDITAR:
Encontré información adicional sobre la colación "Hungarian Technical" que podría ser de interés:

  • MySQL:colación húngara -- Este es un archivo de una discusión de listserv por parte de algunos desarrolladores de MySQL que intentan descubrir los detalles de cómo implementar la intercalación. Aparentemente, tiene algunas reglas complejas, debido al menos en parte a la necesidad de equiparar varios caracteres en un solo carácter para clasificarlos (busque la sección "3. Regla especial de dígrafo/trígrafo"). Esto podría causar algún comportamiento inesperado. Las combinaciones de letras específicas se indican en esa sección, por lo que al menos facilita la configuración de un caso de prueba para ayudar a determinar si las reglas de clasificación invalidan el uso de esta intercalación.

  • ¿Por qué hay tantas(106) intercalaciones húngaras? -- Esta es una discusión sobre social.msdn que tiene información interesante. Allí hay un comentario de Erland Sommarsko en el que afirma:

    Dada la discusión de los desarrolladores de MySQL sobre las reglas complejas, los resultados de las pruebas no parecen tan sorprendentes.

Por lo tanto, ambos elementos probablemente deberían tenerse en cuenta para decidir si seguir o no la ruta fácil de simplemente configurar el campo NVARCHAR en una de estas intercalaciones técnicas húngaras, o seguir la recomendación de @GarethD de la columna calculada.

Para obtener más información sobre cómo trabajar con cadenas e intercalaciones, visite:Información de intercalaciones