Caracteres

Unicode

Unicode es un estándar de codificación que asigna un número único (código de punto) a cada carácter de texto en casi todos los idiomas del mundo. Este sistema permite la representación y manipulación de texto de manera coherente, independientemente del idioma o la plataforma. Las codificaciones más comunes incluyen UTF-8, UTF-16 y UTF-32, siendo UTF-8 la más utilizada en la web.

El conjunto completo de los caracteres Unicode recogidos hasta el momento ocupa un máximo de 4 bytes para algunos caracteres, pero existe el conjunto reducido de BMP (Basic Multilingual Plane) que ocupa 3 bytes.

Emoji
Punto Unicode
UTF-8
UTF-16
UTF-32

😀

U+1F600

F0 9F 98 80

D83D DE00

0001 F600

❤️

U+2764

E2 9D A4

2764

0000 2764

🌸

U+1F338

F0 9F 8C B8

D83C DF38

0001 F338

CHARACTER SET

Cuando se trabaja con bases de datos, la elección del conjunto de caracteres (CHARACTER SET) es crucial para almacenar y manejar texto adecuadamente. En MySQL, se pueden utilizar diferentes conjuntos de caracteres:

  • latin1: Este conjunto de caracteres es limitado y solo puede representar caracteres de Europa Occidental. Es adecuado para textos simples en idiomas como español o francés, pero no es adecuado para otros idiomas.

  • utf8: Aunque su nombre sugiere que es una implementación de UTF-8, en MySQL solo admite hasta tres bytes por carácter, lo que significa que no puede almacenar todos los caracteres posibles en Unicode.

  • utf8mb4: Esta es la versión completa de UTF-8 en MySQL, que permite almacenar todos los caracteres de Unicode, incluyendo emojis y caracteres de idiomas menos comunes.

Puedes consultar los conjuntos de caracteres disponibles:

SHOW CHARACTER SET;

Al crear una base de datos en MySQL, se puede especificar el conjunto de caracteres. Por ejemplo, para crear una base de datos que use utf8mb4:

CREATE DATABASE mi_base_de_datos CHARACTER SET utf8mb4;

Al crear una tabla, también se puede definir el conjunto de caracteres para las columnas específicas. Por ejemplo:

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) CHARACTER SET utf8mb4,
    email VARCHAR(255) CHARACTER SET utf8mb4
);

En este caso, las columnas nombre y email estarán configuradas para soportar caracteres Unicode completos, incluyendo emojis.

COLLATE

COLLATE es el cotejamiento que se utiliza en una base de datos, siendo el criterio para comparar y ordenar caracteres, por ejemplo entre mayúsculas o minúsculas, tildes, etc.

Puedes consultar el cotejamiento:

SHOW COLLATION;
SHOW COLLATION LIKE 'utf8%';

El cotejamiento puede ser:

  • case-sensitive (_cs): Los caracteres a y A son diferentes.

  • case-insensitive (_ci): Los caracteres a y A son iguales.

  • binary (_bin): Dos caracteres son iguales si los valores de su representación numérica son iguales.

Al crear una base de datos, puedes especificar una collation. Por ejemplo:

CREATE DATABASE mi_base_de_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Aquí, utf8mb4_unicode_ci es una collation que permite la comparación de caracteres de forma insensible a mayúsculas y minúsculas.

También puedes definir la collation al crear tablas. Por ejemplo:

CREATE TABLE productos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    descripcion TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
);

Podemos consultar el charset y el collate de una base de datos con unas variables especiales de MySQL:

USE database;
SELECT @@character_set_database, @@collation_database;

Last updated