es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Teniendo dificultades para encontrar un conjunto de intercalación latino adecuado para ə, ḩ, ṟ, ẕ, ḑ, ắ y posiblemente otros.

Mi base de datos contiene nombres de ciudades y sus provincias/distritos/estados asociados. Un poco más de 40.000 filas.

Estoy teniendo dificultades para encontrar un conjunto de intercalación adecuado que desensibilice todos los caracteres no latinos. Mi esperanza es dejar los valores originales como están, pero asegurarme de que la base de datos sea insensible (para que los usuarios puedan consultar la base de datos utilizando únicamente caracteres “ingleses”).

He estado probando varios conjuntos de intercalación y he encontrado que SQLLatin1GeneralCP1CI_AI me deja con la menor cantidad de problemas (solo 186 filas contienen valores fuera del alcance de esta intercalación).

Hay algunos caracteres que no pude controlar (todos bajo la columna de “provincia”). Los que he encontrado son: ə, ḩ, ṟ, ẕ, ḑ, ắ.

Los resultados de la consulta sugieren que los países que contienen caracteres “sin intercalar” son:

país            número de valores
--------        ----------------
Afganistán      1
Azerbaiyán      31
Bahréin         1
Egipto          14
Irán            15
Irak            3
Kuwait          3
Libia           3
Qatar           1
Arabia Saudita  15
Siria           37
Vietnam         48
Yemen           14

Sé que puedo usar REPLACE / TRANSLATE, pero preferiría dejar los valores como están y establecer una intercalación adecuada a nivel de base de datos (en el peor de los casos, solo traduciré los 186 obstinados).

¿Algún consejo sobre cómo o dónde encontrar la intercalación que tanto deseo para Navidad? Además, soy muy nuevo en todo esto, así que podría estar pasando por alto algo obvio.

Estoy utilizando Microsoft SQL Server Management Studio v18.10.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándose en la información proporcionada, parece que el conjunto de intercalación SQL_Latin1_General_CP1_CI_AI es el más cercano a lo que estás buscando. Sin embargo, todavía deja algunos caracteres no latinos.

    Una posible solución podría ser crear una intercalación personalizada que cumpla con tus requisitos. Esto se puede hacer utilizando la cláusula COLLATE en SQL. Sin embargo, esto requiere conocimiento de mapeos de caracteres Unicode y puede ser un poco complicado, especialmente para aquellos que son nuevos en las intercalaciones de bases de datos.

    Otra opción es utilizar una biblioteca de terceros como ICU (Componentes Internacionales para Unicode). ICU proporciona un soporte completo para Unicode y puede resolver tu problema con los caracteres no latinos. Puedes utilizar la biblioteca ICU con SQL Server escribiendo un procedimiento CLR (Common Language Runtime) en C# o VB.NET y desplegándolo en el servidor como un ensamblado.

    En cualquier caso, es importante considerar cuidadosamente las implicaciones de cambiar la intercalación de una base de datos existente, ya que puede afectar el ordenamiento, la indexación y el rendimiento de las consultas. También puede requerir la actualización de cualquier código que haga referencia a la base de datos. Se recomienda realizar pruebas exhaustivas antes de realizar cambios en una base de datos de producción.

Comments are closed.