Estos dos cotejamientos son para la codificación de caracteres UTF-8. Las diferencias están en cómo se clasifica y compara el texto. En resumen: utf8_unicode_ci utiliza el Algoritmo de Intercalación de Unicode tal y como se define en los estándares de Unicode, mientras que utf8_general_ci es un ordenamiento más simple que produce resultados de ordenación "menos precisos"
Nota: Desde MySQL 5.5.3 se debería usar utf8mb4 en lugar de utf8. Ambos se refieren a la codificación UTF-8, pero la antigua utf8 tenía una limitación específica de MySQL que impedía el uso de caracteres numerados por encima de 0xFFFD (primeros 65,536 caracteres Unicode).
Precisión
utf8mb4_unicode_ci se basa en el estándar Unicode para la clasificación y comparación, que clasifica con precisión en una amplia gama de idiomas.
utf8mb4_general_ci no implementa todas las reglas de clasificación Unicode, lo que resultará en una clasificación indeseable en algunas situaciones, como cuando se usan lenguajes o caracteres particulares.
Desempeño
utf8mb4_general_ci es más rápido en las comparaciones y en la ordenación, porque toma un montón de atajos relacionados con el rendimiento. En los servidores modernos, este aumento de rendimiento será casi insignificante. Fue ideado en una época en la que los servidores tenían una pequeña fracción del rendimiento de la U de los ordenadores actuales.
utf8mb4_unicode_ci, que utiliza las reglas Unicode para ordenar y comparar, emplea un algoritmo bastante complejo para ordenar correctamente en una amplia gama de idiomas y cuando se utiliza una amplia gama de caracteres especiales. Estas reglas deben tener en cuenta las convenciones específicas de cada idioma; no todo el mundo ordena sus caracteres en lo que llamaríamos «orden alfabético».
En cuanto a las lenguas latinas (es decir, «europeas»), no hay mucha diferencia entre la clasificación Unicode y la clasificación simplificada utf8mb4_general_ci en MySQL, pero todavía hay algunas diferencias:
Por ejemplo, la compaginación Unicode clasifica «ß» como «ss», y «Œ» como «OE» como querrían normalmente las personas que usan esos caracteres, mientras que utf8mb4_general_ci los clasifica como caracteres simples (presumiblemente como «s» y «e» respectivamente).
Algunos caracteres Unicode se definen como ignorables, lo que significa que no deberían contar para el orden de clasificación y la comparación debería pasar al siguiente carácter. utf8mb4_unicode_ci los maneja correctamente.
En los idiomas no latinos, como los idiomas asiáticos o los idiomas con alfabetos diferentes, puede haber muchas más diferencias entre la clasificación Unicode y la clasificación simplificada utf8mb4_general_ci. La idoneidad de utf8mb4_general_ci dependerá en gran medida del lenguaje utilizado. Para algunos idiomas, será bastante inadecuado.
¿Qué debe utilizar?
Es casi seguro que ya no hay razón para usar utf8mb4_general_ci, ya que hemos dejado atrás el punto en el que la velocidad de la U es lo suficientemente baja como para que la diferencia de rendimiento sea importante. Es casi seguro que su base de datos estará limitada por otros cuellos de botella.
La diferencia en el rendimiento sólo se puede medir en situaciones extremadamente especializadas, y si ese eres tú, probablemente ya lo sepas. Si está experimentando una clasificación lenta, en casi todos los casos será un problema con sus índices/plan de consulta.
Cambiar la función de compaginación no debería ser una de las prioridades en la lista de cosas que hay que solucionar.
En el pasado, algunas personas recomendaban usar utf8mb4_general_ci excepto cuando la clasificación precisa iba a ser lo suficientemente importante como para justificar el coste de rendimiento. Hoy en día, ese coste de rendimiento casi ha desaparecido, y los desarrolladores están tratando la internacionalización más seriamente.
Otra cosa que añadiré es que incluso si sabes que tu aplicación sólo soporta el idioma inglés, es posible que tenga que tratar con nombres de personas, que a menudo pueden contener caracteres utilizados en otros idiomas en los que es igual de importante ordenar correctamente.
El uso de las reglas Unicode para todo ayuda a añadir la tranquilidad de que las personas muy inteligentes de Unicode han trabajado muy duro para que la clasificación funcione correctamente.
Traducción realizada con el traductor http://www.DeepL.com/Translator
Comentarios