Codificaciones de caracteres y tipos de cotejamiento

Las codificaciones de caracteres y los tipos de cotejamiento (collations), dos conceptos diferentes, relacionados con el manejo del texto en sistemas informáticos. En esta publicación trataremos ambos conceptos, así como algunos tipos de cotejamientos para que puedas entenderlos, incluyendo fuentes, referencias y enlaces relacionados.

Codificación de caracteres

De forma general, con codificación de caracteres nos referimos la la forma en que se representan los caracteres en bytes dentro de un sistema informático.

Citando a Wikipedia:

La codificación de caracteres es el método que permite convertir un carácter de un lenguaje natural (como el de un alfabeto o silabario) en un símbolo de otro sistema de representación, como un número o una secuencia de pulsos electrónicos en un sistema electrónico aplicando normas o reglas de codificación.

Ejemplos:

  • ASCII: Usa 1 byte por carácter (limitado a caracteres básicos).
  • UTF-8 (1993): Usa de 1 a 4 bytes por carácter (soporta todos los caracteres Unicode). No define reglas de ordenamiento.
  • UTF-16: Usa 2 o 4 bytes por carácter.

Notas:

  • UTF son las siglas de "Unicode Transformation Format", un tipo de codificación de caracteres Unicode e ISO 10646 que utiliza símbolos de longitud variable, ampliamente utilizado.
  • Una codificación incorrecta puede causar errores al momento de representar u ordenan los textos almacenados en una base o documento.

Cotejamiento (collation)

Básicamente, es el conjunto de reglas que determina cómo se comparan y ordenan los caracteres en una base de datos o sistema informático.

Ejemplos:

  • UCA (Unicode Collation Algorithm) (1997): Algoritmo estándar para comparar cadenas en Unicode que permite varios niveles de comparación para acentos, mayúsculas/minúsculas, etc. Base para los cotejamientos modernos de Unicode.
  • utf8_bin: Hace comparación binaria en la que A ? a.
  • utf8_general_ci (Antes de 2005, en MySQL 4.1): No distingue entre mayúsculas y minúsculas (ci = case insensitive). Resulta rápido pero no es compatible con muchos lenguajes.
  • utf8_unicode_ci (Desde 2005, en MySQL 4.1.2): Basado en UCA, más compatible y adecuado para múltiples idiomas, aunque a cambio de un menor rendimiento frente utf8_general_ci.
  • utf8mb4_unicode_ci (Desde MySQL 5.5, en 2010): Agrega soporte completo para caracteres Unicode (4 bytes). Soporta emojis y caracteres extendidos, ofreciendo mejor manejo de caracteres especiales en distintos idiomas.
  • utf8mb4_general_ci (Desde MySQL 5.5, en 2010, pero menos usado): Es el cotejamiento similar a utf8_general_ci, pero para utf8mb4. Más rápido, pero menos preciso en ordenación de caracteres.
  • utf8mb4_unicode_520_ci (Desde MySQL 5.6, en 2013): Basado en la versión UCA 5.2 de Unicode, mejora el ordenamiento en algunos idiomas.
  • utf8mb4_0900_ai_ci (Desde MySQL 8.0, en 2018): Basado en Unicode 9.0 y UCA 9.0, no considera acentos ni mayúsculas/ minúsculas para los ordenamientos (ai_ci = accent insensitive; ci=case insensitive), resulta más preciso y eficiente que utf8mb4_unicode_ci. Variante: utf8mb4_0900_as_cs, sensible a acentos y mayúsculas (as=accent sensitive; cs=case sensitive).

Notas finales

  • Si usas MySQL 8.0+, lo mejor es utf8mb4_0900_ai_ci por precisión y compatibilidad.
  • Si trabajas con versiones anteriores, utf8mb4_unicode_ci es una opción más confiable que utf8_general_ci.

Referencias y enlaces relacionados

Saludos y bonita jornada.

Plácido Luna.

Comments (0)
Login or Join to comment.