Saltar al contenido

¿Diferencia entre las intercalaciones utf8mb4_unicode_ci y utf8mb4_unicode_520_ci en MariaDB/MySQL?

Si encuentras alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes añadir el código al trabajo final.

Solución:

Bueno, tendrá que leer la documentación. No puedo decirte lo que deberías usar porque cada proyecto es diferente.

10.1.3 Convenciones de nomenclatura de intercalación

Los nombres de intercalación de MySQL siguen estas convenciones:

El nombre de una intercalación comienza con el nombre del conjunto de caracteres con el que está asociado, seguido de uno o más sufijos que indican otras características de la intercalación. Por ejemplo, utf8_general_ci y latin_swedish_ci son intercalaciones para los conjuntos de caracteres utf8 y latin1, respectivamente.

Una intercalación específica del idioma incluye un nombre de idioma. Por ejemplo, utf8_turkish_ci y utf8_hungarian_ci ordenan los caracteres para el juego de caracteres utf8 usando las reglas del turco y el húngaro, respectivamente.

La distinción entre mayúsculas y minúsculas para la clasificación se indica mediante _ci (sin distinción entre mayúsculas y minúsculas), _cs (con distinción entre mayúsculas y minúsculas) o _bin (binario; las comparaciones de caracteres se basan en valores de código binario de caracteres). Por ejemplo, latin1_general_ci no distingue entre mayúsculas y minúsculas, latin1_general_cs distingue entre mayúsculas y minúsculas y latin1_bin usa valores de código binario.

Para Unicode, los nombres de intercalación pueden incluir un número de versión para indicar la versión del algoritmo de intercalación Unicode (UCA) en el que se basa la intercalación. Las intercalaciones basadas en UCA sin un número de versión en el nombre usan el peso UCA de la versión 4.0.0 keys. Por ejemplo:

utf8_unicode_ci (sin nombre de versión) se basa en el peso UCA 4.0.0 keys >(http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt).

utf8_unicode_520_ci se basa en el peso UCA 5.2.0 keys (http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt).

Para Unicode, las intercalaciones xxx_general_mysql500_ci conservan el orden anterior a 5.1.24 de las intercalaciones xxx_general_ci originales y permiten actualizaciones para tablas creadas antes de MySQL 5.1.24. Para obtener más información, consulte la Sección 2.11.3, “Comprobación de si se deben reconstruir tablas o índices” y la Sección 2.11.4, “Reconstrucción o reparación de tablas o índices”.

Fuente: https://dev.mysql.com/doc/refman/5.6/en/charset-collation-names.html

Desarrollaré la respuesta de @StuiterSlurf y me centraré en los detalles de utf8mb4_unicode_ci/utf8mb4_unicode_520_ci:

Como puedes leer aquí (Pedro Gulutzan) hay un problema con la clasificación/comparación de la letra polaca “Ł” (L con trazo) (minúsculas: “ł”; html esc: ł y Ł ) – tenemos la siguiente suposición en la codificación (lo mismo con mb4):

utf8_polish_ci      Ł greater than L and less than M
utf8_unicode_ci     Ł greater than L and less than M
utf8_unicode_520_ci Ł equal to L
utf8_general_ci     Ł greater than Z

En el idioma polaco, la letra Ł está después de la letra L y antes de la M. Y para diferentes sistemas de codificación, obtendrá diferentes resultados de clasificación. Ninguno de estos códigos es mejor o peor, depende de sus necesidades.

Para ver un poco más de discusión sobre las diferencias reales, puede ir a https://dev.mysql.com/worklog/task/?id=2673 y hacer clic en “Arquitectura de alto nivel”.

Si tienes alguna indecisión o forma de afinar nuestro noticia eres capaz de escribir una explicación y con gusto lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *