HDP115

Ejemplo de restricción CHARACTER SET

La restricción CHARACTER SET define los conjuntos de caracteres utilizados para almacenar datos en columnas de tipo texto.

CE

Cristian Escalante

Última actualización: 8 de mayo de 2025

sql
programación
desarrollo

Ejemplos de restricción CHARACTER SET

Un CHARACTER SET (conjunto de caracteres) define qué caracteres pueden ser almacenados en una base de datos, tabla o columna. Está estrechamente relacionado con la COLLATION, que define cómo se comparan y ordenan los caracteres. La elección del conjunto de caracteres adecuado es fundamental para el soporte multilingüe y el manejo correcto de caracteres especiales.

MySQL

En MySQL, podemos especificar el conjunto de caracteres a nivel de base de datos, tabla o columna:

-- A nivel de base de datos
CREATE DATABASE tienda
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

-- A nivel de tabla
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_unicode_ci
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Para modificar el conjunto de caracteres de una tabla existente:

ALTER TABLE productos
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

-- Para una columna específica
ALTER TABLE productos
MODIFY nombre VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Algunos conjuntos de caracteres comunes en MySQL:

  • utf8mb4: Soporta todos los caracteres Unicode, incluyendo emojis (4 bytes por carácter)
  • utf8: Soporta la mayoría de caracteres Unicode (3 bytes por carácter)
  • latin1: Soporta caracteres de Europa occidental (1 byte por carácter)

PostgreSQL

En PostgreSQL, el conjunto de caracteres se especifica al crear la base de datos:

CREATE DATABASE tienda
WITH ENCODING 'UTF8'
LC_COLLATE = 'es_ES.UTF-8'
LC_CTYPE = 'es_ES.UTF-8';

PostgreSQL no permite cambiar el conjunto de caracteres de una base de datos existente directamente. Para cambiar el conjunto de caracteres, se debe crear una nueva base de datos y migrar los datos.

Para verificar la codificación de una base de datos:

SELECT datname, pg_encoding_to_char(encoding) as encoding
FROM pg_database
WHERE datname = 'tienda';

SQL Server

En SQL Server, el conjunto de caracteres se especifica mediante la configuración de COLLATION:

-- A nivel de base de datos
CREATE DATABASE tienda
COLLATE SQL_Latin1_General_CP1_CI_AS;

-- A nivel de columna
CREATE TABLE clientes (
    id INT PRIMARY KEY,
    nombre NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS,
    direccion NVARCHAR(200) COLLATE SQL_Latin1_General_CP1_CI_AS
);

Para datos Unicode, se recomienda usar los tipos NCHAR, NVARCHAR y NTEXT:

CREATE TABLE productos (
    id INT PRIMARY KEY,
    nombre NVARCHAR(100), -- Almacena caracteres Unicode
    descripcion NVARCHAR(MAX) -- Equivalente a NTEXT pero más moderno
);

Para modificar la colación de una base de datos existente:

ALTER DATABASE tienda
COLLATE SQL_Latin1_General_CP1_CI_AS;

Oracle

En Oracle, el conjunto de caracteres se especifica al crear la base de datos:

CREATE DATABASE tienda
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET UTF8;

CHARACTER SET define el conjunto de caracteres para columnas CHAR, VARCHAR2 y CLOB, mientras que NATIONAL CHARACTER SET define el conjunto para columnas NCHAR, NVARCHAR2 y NCLOB.

Para columnas específicas, podemos usar:

CREATE TABLE productos (
    id NUMBER PRIMARY KEY,
    nombre VARCHAR2(100 CHAR), -- Especifica longitud en caracteres, no en bytes
    descripcion_local VARCHAR2(500),
    descripcion_internacional NVARCHAR2(500) -- Usa el NATIONAL CHARACTER SET
);

SQLite

SQLite tiene soporte integrado para UTF-8, UTF-16BE y UTF-16LE, pero no proporciona una sintaxis específica para definir el conjunto de caracteres. Por defecto, SQLite utiliza UTF-8:

-- Las cadenas se almacenan automáticamente en UTF-8
CREATE TABLE usuarios (
    id INTEGER PRIMARY KEY,
    nombre TEXT, -- Almacenado en UTF-8 por defecto
    direccion TEXT
);

Buenas prácticas

  1. Usa UTF-8: Para aplicaciones modernas, es recomendable usar UTF-8 (o utf8mb4 en MySQL) para asegurar la compatibilidad con todos los idiomas y caracteres especiales.
  2. Consistencia: Mantén el mismo conjunto de caracteres en toda la base de datos para evitar problemas de conversión.
  3. Considera el rendimiento: Los conjuntos de caracteres más complejos (como UTF-8) requieren más espacio de almacenamiento y pueden afectar el rendimiento en tablas muy grandes.
  4. Prueba con datos reales: Verifica que tu conjunto de caracteres funcione correctamente con los datos que planeas almacenar, especialmente si incluyen idiomas con scripts no latinos.
-- Ejemplo de inserción con caracteres especiales (MySQL)
INSERT INTO productos (nombre, descripcion)
VALUES ('Café expreso', 'Café italiano de sabor intenso y aroma único ☕');
Ejemplo de restricción UNSIGNED
La restricción UNSIGNED se utiliza en MySQL para definir que...
Ejemplo de restricción COLLATE
La restricción COLLATE define cómo se comparan y ordenan los...
Referencias
Oracle Corporation. MySQL 8.0 Reference Manual - Character Sets, Collations, Unicode. https://dev.mysql.com/doc/refman/8.0/en/charset.html
PostgreSQL Global Development Group. PostgreSQL Documentation - Character Set Support. https://www.postgresql.org/docs/current/multibyte.html
Microsoft. SQL Server Documentation - Collations and Unicode Support. https://learn.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de CSS

Aprende los conceptos básicos de CSS

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025