utf8mb4_unicode_520_ci utf8mb4_0900_ai_ci unknown error desconocida code mysql unicode mariadb collation

error - unknown collation ''utf8mb4_0900_ai_ci'' mysql workbench



¿Diferencia entre utf8mb4_unicode_ci y utf8mb4_unicode_520_ci colaciones en MariaDB/MySQL? (3)

Me conecté a MariaDB / MySQL y entré:

SHOW COLLATION;

Veo utf8mb4_unicode_ci y utf8mb4_unicode_520_ci entre las colaciones disponibles. ¿Cuál es la diferencia entre estas dos colaciones y cuáles deberíamos estar usando?


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

Como puede leer here ( Peter Gulutzan ), hay un problema con la clasificación / comparación de la letra polaca "Ł" (L con trazo) (minúscula: "ł"; html esc: ł y Ł ) - tenemos siguiente supuesto en la codificación:

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 idioma polaco, la letra Ł es posterior a la letra L y antes de 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.



Pues deberás leer en la documentación. No puedo decirte lo que debes usar porque cada proyecto es diferente.

10.1.3 Convenciones de nomenclatura de colación

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

Un nombre de 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 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 clasifican los caracteres para el conjunto de caracteres utf8 usando las reglas de turco y húngaro, respectivamente.

La sensibilidad de mayúsculas y minúsculas para la clasificación se indica mediante _ci (no distingue mayúsculas y minúsculas), _cs (distingue entre mayúsculas y minúsculas) o _bin (binario; las comparaciones de caracteres se basan en valores de códigos binarios 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 utiliza 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 de Unicode (UCA) en el que se basa la intercalación. Las colaciones basadas en UCA sin un número de versión en el nombre usan las claves de peso UCA versión 4.0.0. Por ejemplo:

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

utf8_unicode_520_ci se basa en las claves de peso UCA 5.2.0 ( http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt ).

Para Unicode, las colaciones xxx_general_mysql500_ci conservan el orden previo a 5.1.24 de las colaciones xxx_general_ci originales y permiten actualizaciones para las 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 las tablas o los índices deben ser reconstruidos", 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